blob: 8369d6c90ba6edfd01ab40c54349d5ff33d1574e [file] [log] [blame]
/*
*
* Copyright (c) International Business Machines Corp., 2002
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* 10/31/2002 Port to LTP robbiew@us.ibm.com */
/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */
/*
* NAME
* nftw64.c - Test of nftw64()
*/
#include <pwd.h>
#include "nftw64.h"
void setup(void);
void blenter(void);
void blexit(void);
void anyfail(void);
char progname[]="nftw64.c";
/** LTP Port **/
#define FAILED 0
#define PASSED 1
int local_flag = PASSED;
int block_number;
FILE *temp;
char *TCID="nftw6401"; /* Test program identifier. */
int TST_TOTAL=10; /* Total number of test cases. */
extern int Tst_count; /* Test Case counter for tst_* routines */
struct passwd *ltpuser; /* password struct for ltpuser */
/**************/
/* Used for error return for some library routines */
int s2;
/* error messages formatted here. */
char ebuf[ERR_BUF_SIZ];
/*
* Local data declarations.
*/
char *dirlist[NDIRLISTENTS];
int visit;
int next_fd[4];
pathdata pathdat[] = {
{
"./tmp/data",
S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH,
DIR, ""
}, {
"./tmp/byebye",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
REG, "byebye!\n"
}, {
"./tmp/data/d333",
S_IRWXU|S_IRWXG|S_IRWXO,
DIR, ""
}, {
"./tmp/data/d666",
S_IRWXU|S_IRWXG|S_IRWXO,
DIR, ""
}, {
"./tmp/data/d777",
S_IRWXU|S_IRWXG|S_IRWXO,
DIR, ""
}, {
"./tmp/data/dirg",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirh",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirl",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/d333/errs",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
REG, "Do not eat yellow snow!\n"
}, {
"./tmp/data/d666/errs",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
REG, "Do not eat yellow snow!\n"
}, {
"./tmp/data/d777/errs",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
REG, "Do not eat yellow snow!\n"
}, {
"./tmp/data/dirg/filebad",
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH,
REG, ""
}, {
"./tmp/data/dirg/fileok",
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH,
REG, ""
}, {
"./tmp/data/dirg/symlink",
S_IRWXU|S_IRWXG|S_IRWXO,
SYM, "../../byebye"
}, {
"./tmp/data/dirg/dir_left.1",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirg/dir_left.1/dir_left.2",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirg/dir_right.1",
S_IRWXU|S_IRWXG|S_IRWXO,
DIR, ""
}, {
"./tmp/data/dirg/dir_left.1/dir_left.2/left.3",
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH,
REG, ""
}, {
"./tmp/data/dirh/dir_left.1",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirh/dir_right.1",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirh/dir_left.1/dir_left.2",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirh/dir_left.1/dir_left.2/left.3",
S_IRWXU|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH,
REG, "left leaf\n"
}, {
"./tmp/data/dirh/dir_right.1/dir_right.2",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirh/dir_right.1/dir_right.2/right.3",
S_IRWXU|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH,
REG, "right leaf\n"
}, {
"./tmp/data/dirl/dir_left.1",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirl/dir_left.1/dir_left.2",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirl/dir_left.1/dir_left.2/left.3",
0,
SYM, "../../../dirh"
}, {
"./tmp/data/dirl/dir_right.1",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirl/dir_right.1/dir_right.2",
S_IRWXU|S_IRWXG|S_IROTH|S_IWOTH,
DIR, ""
}, {
"./tmp/data/dirl/dir_right.1/dir_right.2/right.3",
0,
SYM, "../dir_right.2"
}, {
"./tmp/data/loop",
0,
SYM, "./loop"
}
};
char *goodlist[] = {
"/dirh",
"/dirh/dir_left.1",
"/dirh/dir_right.1",
"/dirh/dir_left.1/dir_left.2",
"/dirh/dir_right.1/dir_right.2",
"/dirh/dir_left.1/dir_left.2/left.3",
"/dirh/dir_right.1/dir_right.2/right.3"
};
struct list badlist[] = {
{ "/dirg", FTW_D },
{ "/dirg/dir_left.1", FTW_D },
/* not FTW_NS in following since stat can't fail if file exists */
{ "/dirg/filebad", FTW_F },
{ "/dirg/fileok", FTW_F },
{ "/dirg/symlink", FTW_SL },
{ "/dirg/dir_right.1", FTW_DNR},
{ "/dirg/dir_left.1/dir_left.2", FTW_D },
{ "/dirg/dir_left.1/dir_left.2/left.3", FTW_F },
};
struct list mnem[] = {
{ "FTW_F", FTW_F },
{ "FTW_D", FTW_D },
{ "FTW_DNR", FTW_DNR },
{ "FTW_NS", FTW_NS },
{ "FTW_SL", FTW_SL },
{ "FTW_DP", FTW_DP },
{ "FTW_SLN", FTW_SLN },
};
int npathdats, ngoods, nbads, nmnem;
/*--------------------------------------------------------------*/
#ifdef LINUX
int
#else
void
#endif
main (void)
{
setup(); /* temp file is now open */
npathdats = (sizeof(pathdat) / sizeof(pathdat[0]));
ngoods = (sizeof(goodlist) / sizeof(goodlist[0]));
nbads = (sizeof(badlist) / sizeof(badlist[0]));
nmnem = (sizeof(mnem) / sizeof(mnem[0]));
setup_path();
/*---------------- ENTER BLOCK 0 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall recursively descend the\n");
fprintf(temp, "directory hierarchy rooted in path until it has\n");
fprintf(temp,
"traversed the whole tree, calling the function fn for\n");
fprintf(temp, "each object in the directory tree, and return 0.\n\n");
#endif
test1A();
blexit();
/*--------------- EXIT BLOCK 0 ---------------------------------*/
/*---------------- ENTER BLOCK 1 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) when flags contains FTW_PHYS shall\n");
fprintf(temp, "not traverse symbolic links.\n\n");
#endif
test2A();
blexit();
/*--------------- EXIT BLOCK 1 ---------------------------------*/
/*---------------- ENTER BLOCK 2 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp,
"depth, int flags) when flags does not contain FTW_PHYS\n");
fprintf(temp,
"shall follow links instead of reporting them and shall\n");
fprintf(temp, "not report the same file twice.\n\n");
#endif
test3A();
blexit();
/*--------------- EXIT BLOCK 2 ---------------------------------*/
/*---------------- ENTER BLOCK 3 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp,
"depth, int flags) when flags contains FTW_DEPTH shall\n");
fprintf(temp, "report all files in a directory before reporting the\n");
fprintf(temp, "directory.\n\n");
#endif
test4A();
blexit();
/*--------------- EXIT BLOCK 3 ---------------------------------*/
/*---------------- ENTER BLOCK 4 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) when flags does not contain\n");
fprintf(temp, "FTW_DEPTH shall report a directory before reporting\n");
fprintf(temp, "the files in that directory.\n\n");
#endif
test5A();
blexit();
/*--------------- EXIT BLOCK 4 ---------------------------------*/
/*---------------- ENTER BLOCK 5 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp,
"depth, int flags) when flags contains FTW_CHDIR shall\n");
fprintf(temp,
"change the current working directory to each directory\n");
fprintf(temp, "as it reports files in that directory.\n\n");
#endif
test6A();
blexit();
/*--------------- EXIT BLOCK 5 ---------------------------------*/
/*---------------- ENTER BLOCK 6 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass the path-name of the\n");
fprintf(temp, "current object as the first argument of the function\n");
fprintf(temp, "fn.\n\n");
#endif
test7A();
blexit();
/*--------------- EXIT BLOCK 6 ---------------------------------*/
/*---------------- ENTER BLOCK 7 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp, "char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass a pointer to a stat\n");
fprintf(temp, "structure containing information about the current\n");
fprintf(temp, "object as the second argument to fn.\n\n");
#endif
test8A();
blexit();
/*--------------- EXIT BLOCK 7 ---------------------------------*/
/*---------------- ENTER BLOCK 8 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_F as the third\n");
fprintf(temp,
"argument of the function fn when the object is a file.\n\n");
#endif
test9A();
blexit();
/*--------------- EXIT BLOCK 8 ---------------------------------*/
/*---------------- ENTER BLOCK 9 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_D as the third\n");
fprintf(temp, "argument of the function fn when the object is a\n");
fprintf(temp, "directory.\n\n");
#endif
test10A();
blexit();
/*--------------- EXIT BLOCK 9 ---------------------------------*/
/*---------------- ENTER BLOCK 10 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_DP as the third\n");
fprintf(temp, "argument of the function fn when the object is a\n");
fprintf(temp, "directory and subdirectories have been visited.\n\n");
#endif
test11A();
blexit();
/*--------------- EXIT BLOCK 10 ---------------------------------*/
/*---------------- ENTER BLOCK 11 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_SL as the third\n");
fprintf(temp, "argument of the function fn when the object is a\n");
fprintf(temp, "symbolic link.\n\n");
#endif
test12A();
blexit();
/*--------------- EXIT BLOCK 11 ---------------------------------*/
/*---------------- ENTER BLOCK 12 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_SLN as the third\n");
fprintf(temp, "argument of the function fn when the object is a\n");
fprintf(temp,
"symbolic link that does not name an existing file.\n\n");
#endif
test13A();
blexit();
/*--------------- EXIT BLOCK 12 ---------------------------------*/
/*---------------- ENTER BLOCK 13 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_DNR as the third\n");
fprintf(temp, "argument of the function fn when the object is a\n");
fprintf(temp, "directory that cannot be read.\n\n");
#endif
test14A();
blexit();
/*--------------- EXIT BLOCK 13 ---------------------------------*/
/*---------------- ENTER BLOCK 14 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_NS as the third\n");
fprintf(temp,
"argument of the function fn when stat() failed on the\n");
fprintf(temp, "object because of lack of appropriate permission.\n\n");
#endif
test15A();
blexit();
/*--------------- EXIT BLOCK 14 ---------------------------------*/
/*---------------- ENTER BLOCK 15 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass a structure which\n");
fprintf(temp, "contains the offset into the pathname of the object\n");
fprintf(temp, "and the depth relative to the root of the walk\n");
fprintf(temp,
"starting from 0 as the fourth argument of the function\n");
fprintf(temp, "fn.\n\n");
#endif
test16A();
blexit();
/*--------------- EXIT BLOCK 15 ---------------------------------*/
/*---------------- ENTER BLOCK 16 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_SL as the third\n");
fprintf(temp, "argument to the function fn if and only if the\n");
fprintf(temp, "FTW_PHYS flag is included in flags.\n\n");
#endif
test17A();
blexit();
/*--------------- EXIT BLOCK 16 ---------------------------------*/
/*---------------- ENTER BLOCK 17 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall pass FTW_SLN as the third\n");
fprintf(temp, "argument to the function fn if and only if the\n");
fprintf(temp, "FTW_PHYS flag is not included in flags.\n\n");
#endif
test18A();
blexit();
/*--------------- EXIT BLOCK 17 ---------------------------------*/
/*---------------- ENTER BLOCK 18 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"On a call to int nftw64(const char *path, int\n");
fprintf(temp,
"(*fn)(const char *, const struct stat *, int, struct\n");
fprintf(temp,
"FTW *), int depth, int flags) when the third argument\n");
fprintf(temp, "passed to the function fn is FTW_DNR then the\n");
fprintf(temp,
"descendants of the directory shall not be processed.\n\n");
#endif
test19A();
blexit();
/*--------------- EXIT BLOCK 18 ---------------------------------*/
/*---------------- ENTER BLOCK 19 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp,
"depth, int flags) shall close any file descriptors or\n");
fprintf(temp,
"directory streams used to traverse the directory tree.\n\n");
#endif
test20A();
blexit();
/*--------------- EXIT BLOCK 19 ---------------------------------*/
/*---------------- ENTER BLOCK 20 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "On a call to int nftw64(const char *path, int\n");
fprintf(temp,
"(*fn)(const char *, const struct stat *, int, struct\n");
fprintf(temp, "FTW *), int depth, int flags) depth shall be the\n");
fprintf(temp,
"maximum number of file descriptors used for the search.\n\n");
#endif
test21A();
blexit();
/*--------------- EXIT BLOCK 20 ---------------------------------*/
/*---------------- ENTER BLOCK 21 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp, "depth, int flags) shall use at most one file\n");
fprintf(temp, "descriptor for each directory level.\n\n");
#endif
test22A();
blexit();
/*--------------- EXIT BLOCK 21 ---------------------------------*/
/*---------------- ENTER BLOCK 22 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"A call to int nftw64(const char *path, int (*fn)(const\n");
fprintf(temp,
"char *, const struct stat *, int, struct FTW *), int\n");
fprintf(temp,
"depth, int flags) when the function fn returns a\n");
fprintf(temp, "non-zero value shall stop and return the value\n");
fprintf(temp, "returned by fn.\n\n");
#endif
test23A();
blexit();
/*--------------- EXIT BLOCK 22 ---------------------------------*/
/*---------------- ENTER BLOCK 23 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"ENAMETOOLONG in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp, "flags) when the length of path exceeds PATH_MAX.\n\n");
#endif
test24A();
blexit();
/*--------------- EXIT BLOCK 23 ---------------------------------*/
/*---------------- ENTER BLOCK 24 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp,
"ENAMETOOLONG in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp, "flags) when a component of path exceeds NAME_MAX.\n\n");
#endif
test25A();
blexit();
/*--------------- EXIT BLOCK 24 ---------------------------------*/
/*---------------- ENTER BLOCK 25 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "ENOENT in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp,
"flags) when path points to a file which does not exist.\n\n");
#endif
test26A();
blexit();
/*--------------- EXIT BLOCK 25 ---------------------------------*/
/*---------------- ENTER BLOCK 26 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "ENOENT in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp, "flags) when path points to an empty string.\n\n");
#endif
test27A();
blexit();
/*--------------- EXIT BLOCK 26 ---------------------------------*/
/*---------------- ENTER BLOCK 27 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "ENOTDIR in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp, "flags) when path is not a directory.\n\n");
#endif
test28A();
blexit();
/*--------------- EXIT BLOCK 27 ---------------------------------*/
/*---------------- ENTER BLOCK 28 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "EACCES in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp, "flags) when search permission is denied for any\n");
fprintf(temp, "component of path.\n\n");
#endif
test29A();
blexit();
/*--------------- EXIT BLOCK 28 ---------------------------------*/
/*---------------- ENTER BLOCK 29 --------------------------------*/
blenter();
#ifdef DEBUG
fprintf(temp, "EACCES in errno and return -1 on a call to int\n");
fprintf(temp,
"nftw64(const char *path, int (*fn)(const char *, const\n");
fprintf(temp, "struct stat *, int, struct FTW *), int depth, int\n");
fprintf(temp, "flags) when read permission is denied for path.\n\n");
#endif
test30A();
blexit();
/*--------------- EXIT BLOCK 29 ---------------------------------*/
cleanup_function();
anyfail(); /* THIS CALL DOES NOT RETURN - EXITS!! */
/*NOTREACHED*/
return 0;
}
/*--------------------------------------------------------------*/
/** LTP Port **/
/*
* setup
*
* Do set up - here its a dummy function
*/
void
setup()
{
/* Direct debug output to stderr */
temp = stderr;
/* Get the user id "nobody" */
if ((ltpuser = getpwnam("nobody")) == NULL) {
perror("change_owner: nobody not found in /etc/passwd");
exit(1);
}
/* Switch to "nobody" */
setuid(ltpuser->pw_uid);
/* make a temp directory and cd to it */
tst_tmpdir();
}
/*
* Function: blenter()
*
* Description: Print message on entering a new block
*/
void
blenter()
{
local_flag = PASSED;
return;
}
/*
* Function: blexit()
*
* Description: This function will exit a block, a block may be a logical unit
* of a test. It will report the status if the test ie fail or
* pass.
*/
void
blexit()
{
(local_flag == PASSED) ?
tst_resm(TPASS, "Test block %d", block_number)
: tst_resm(TFAIL, "Test block %d", block_number);
block_number++;
return;
}
/*
*
* Function: anyfail()
*
* Description: Exit a test.
*/
void
anyfail()
{
(local_flag == FAILED) ? tst_resm(TFAIL, "Test failed")
: tst_resm(TPASS, "Test passed");
tst_rmdir();
tst_exit();
}
/**************/