Use subdirectory t43 for tests
This commit is contained in:
parent
c8e211ddfa
commit
54c05bc2bd
@ -8,7 +8,7 @@ OBJ= test1 test2 test3 test4 test5 test6 test7 test8 test9 \
|
|||||||
test21 test22 test23 test25 test26 test27 test28 test29 \
|
test21 test22 test23 test25 test26 test27 test28 test29 \
|
||||||
test30 test31 test32 test34 test35 test36 test37 test38 \
|
test30 test31 test32 test34 test35 test36 test37 test38 \
|
||||||
test39 t10a t11a t11b test40 t40a t40b t40c t40d t40e t40f test41 \
|
test39 t10a t11a t11b test40 t40a t40b t40c t40d t40e t40f test41 \
|
||||||
test42
|
test42 test44
|
||||||
|
|
||||||
BIGOBJ= test20 test24
|
BIGOBJ= test20 test24
|
||||||
ROOTOBJ= test11 test33 test43
|
ROOTOBJ= test11 test33 test43
|
||||||
@ -30,7 +30,7 @@ $(ROOTOBJ):
|
|||||||
clean:
|
clean:
|
||||||
cd select && make clean
|
cd select && make clean
|
||||||
-rm -rf *.o *.s *.bak test? test?? t10a t11a t11b \
|
-rm -rf *.o *.s *.bak test? test?? t10a t11a t11b \
|
||||||
t40a t40b t40c t40d t40e t40f DIR*
|
t40a t40b t40c t40d t40e t40f t43 DIR*
|
||||||
|
|
||||||
test1: test1.c
|
test1: test1.c
|
||||||
test2: test2.c
|
test2: test2.c
|
||||||
|
@ -205,8 +205,9 @@ static void check_realpath_recurse(const char *path, int depth)
|
|||||||
if (closedir(dir) < 0) ERR;
|
if (closedir(dir) < 0) ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PATH_DEPTH 3
|
#define PATH_DEPTH 4
|
||||||
#define L(x) "/t43_link_" #x ".tmp"
|
#define PATH_BASE "/t43"
|
||||||
|
#define L(x) PATH_BASE "/link_" #x ".tmp"
|
||||||
|
|
||||||
static char basepath[PATH_MAX + 1];
|
static char basepath[PATH_MAX + 1];
|
||||||
|
|
||||||
@ -237,15 +238,54 @@ static char *addbasepath(char *buffer, const char *path)
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cleanup(int silent)
|
static void cleanup(const char *path)
|
||||||
{
|
{
|
||||||
char buffer[PATH_MAX + 1];
|
DIR *dir;
|
||||||
|
struct dirent *dirent;
|
||||||
|
char pathsub[PATH_MAX + 1];
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
if (unlink(addbasepath(buffer, L(1))) < 0 && !silent) ERR;
|
/* determine file type, avoid following links */
|
||||||
if (unlink(addbasepath(buffer, L(2))) < 0 && !silent) ERR;
|
if (lstat(path, &statbuf) < 0)
|
||||||
if (unlink(addbasepath(buffer, L(3))) < 0 && !silent) ERR;
|
{
|
||||||
if (unlink(addbasepath(buffer, L(4))) < 0 && !silent) ERR;
|
if (errno != ENOENT) ERR;
|
||||||
if (unlink(addbasepath(buffer, L(5))) < 0 && !silent) ERR;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* only recursively process directories (NOT symlinks!) */
|
||||||
|
if ((statbuf.st_mode & S_IFMT) != S_IFDIR)
|
||||||
|
{
|
||||||
|
if (unlink(path) < 0) ERR;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* loop through subdirectories (excluding . and ..) */
|
||||||
|
if (!(dir = opendir(path)))
|
||||||
|
{
|
||||||
|
ERR;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (dirent = readdir(dir))
|
||||||
|
{
|
||||||
|
/* ignore current and parent directories */
|
||||||
|
if (strcmp(dirent->d_name, ".") == 0 ||
|
||||||
|
strcmp(dirent->d_name, "..") == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* build path */
|
||||||
|
if (!pathncat(pathsub, sizeof(pathsub), path, dirent->d_name))
|
||||||
|
{
|
||||||
|
ERR;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* delete path */
|
||||||
|
cleanup(pathsub);
|
||||||
|
}
|
||||||
|
if (closedir(dir) < 0) ERR;
|
||||||
|
|
||||||
|
/* remove the (now empty) directory itself */
|
||||||
|
if (rmdir(path) < 0) ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
@ -257,9 +297,10 @@ int main(int argc, char **argv)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
executable = argv[0];
|
executable = argv[0];
|
||||||
getcwd(basepath, sizeof(basepath));
|
getcwd(basepath, sizeof(basepath));
|
||||||
cleanup(1);
|
cleanup(addbasepath(buffer1, PATH_BASE));
|
||||||
|
|
||||||
/* prepare some symlinks to make it more difficult */
|
/* prepare some symlinks to make it more difficult */
|
||||||
|
if (mkdir(addbasepath(buffer1, PATH_BASE), S_IRWXU) < 0) ERR;
|
||||||
if (symlink("/", addbasepath(buffer1, L(1))) < 0) ERR;
|
if (symlink("/", addbasepath(buffer1, L(1))) < 0) ERR;
|
||||||
if (symlink(basepath, addbasepath(buffer1, L(2))) < 0) ERR;
|
if (symlink(basepath, addbasepath(buffer1, L(2))) < 0) ERR;
|
||||||
|
|
||||||
@ -275,7 +316,7 @@ int main(int argc, char **argv)
|
|||||||
check_realpath_step_by_step(addbasepath(buffer1, L(5)), ELOOP);
|
check_realpath_step_by_step(addbasepath(buffer1, L(5)), ELOOP);
|
||||||
|
|
||||||
/* delete the symlinks */
|
/* delete the symlinks */
|
||||||
cleanup(0);
|
cleanup(addbasepath(buffer1, PATH_BASE));
|
||||||
|
|
||||||
/* done */
|
/* done */
|
||||||
quit();
|
quit();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user