From: Zeng L. <zen...@cn...> - 2014-02-18 08:19:53
|
Add ELOOP errno test for lstat(2) Signed-off-by: Zeng Linggang <zen...@cn...> --- testcases/kernel/syscalls/lstat/lstat02.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/testcases/kernel/syscalls/lstat/lstat02.c b/testcases/kernel/syscalls/lstat/lstat02.c index d108c12..b9494e2 100644 --- a/testcases/kernel/syscalls/lstat/lstat02.c +++ b/testcases/kernel/syscalls/lstat/lstat02.c @@ -29,6 +29,8 @@ * component is too long. * 5) lstat(2) returns -1 and sets errno to ENOTDIR if the directory * component in pathname is not a directory. + * 6) lstat(2) returns -1 and sets errno to ELOOP if the pathname has too + * many symbolic links encountered while traversing. */ #include <stdio.h> @@ -55,6 +57,7 @@ #define TEST_ENOTDIR "test_file/test_enotdir" static char longpathname[PATH_MAX + 2]; +static char elooppathname[PATH_MAX] = "."; #if !defined(UCLINUX) static void bad_addr_setup(int); @@ -74,11 +77,13 @@ static struct test_case_t { #endif {longpathname, ENAMETOOLONG, NULL}, {TEST_ENOTDIR, ENOTDIR, NULL}, + {elooppathname, ELOOP, NULL}, }; char *TCID = "lstat02"; int TST_TOTAL = ARRAY_SIZE(test_cases); -static int exp_enos[] = { EACCES, EFAULT, ENAMETOOLONG, ENOENT, ENOTDIR, 0 }; +static int exp_enos[] = { EACCES, EFAULT, ENAMETOOLONG, ENOENT, + ENOTDIR, ELOOP, 0 }; static void setup(void); static void lstat_verify(int); @@ -110,6 +115,7 @@ int main(int ac, char **av) static void setup(void) { + int i; struct passwd *ltpuser; tst_require_root(NULL); @@ -131,6 +137,11 @@ static void setup(void) SAFE_TOUCH(cleanup, "test_file", MODE_RWX, NULL); memset(longpathname, 'a', PATH_MAX+1); + + SAFE_MKDIR(cleanup, "test_eloop", MODE_RWX); + SAFE_SYMLINK(cleanup, "../test_eloop", "test_eloop/test_eloop"); + for (i = 0; i < 43; i++) + strcat(elooppathname, "/test_eloop"); } #if !defined(UCLINUX) -- 1.8.4.2 |