Add EBADF and EFAULT errno testes for readdir(2).

Signed-off-by: Zeng Linggang <zenglg...@cn.fujitsu.com>
---
 testcases/kernel/syscalls/readdir/readdir21.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/testcases/kernel/syscalls/readdir/readdir21.c 
b/testcases/kernel/syscalls/readdir/readdir21.c
index daf6080..6db2371 100644
--- a/testcases/kernel/syscalls/readdir/readdir21.c
+++ b/testcases/kernel/syscalls/readdir/readdir21.c
@@ -20,6 +20,9 @@
  *   1. Creat a directory and open it, then delete the directory, ENOENT would
  *     return.
  *   2. File descriptor does not refer to a directory, ENOTDIR would return.
+ *   3. Invalid file descriptor fd, EBADF would return.
+ *   4. Argument points outside the calling process's address space, EFAULT
+ *     would return.
  *
  *  PS:
  *   This file is for readdir(2) and the other files(readdir01.c and
@@ -34,6 +37,7 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <unistd.h>
+#include <sys/mman.h>
 #include "test.h"
 #include "usctest.h"
 #include "safe_macros.h"
@@ -43,11 +47,14 @@
 char *TCID = "readdir21";
 
 #define TEST_DIR       "test_dir"
+#define TEST_DIR4      "test_dir4"
 #define TEST_FILE      "test_file"
 #define DIR_MODE       (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP| \
                         S_IXGRP|S_IROTH|S_IXOTH)
 
 static unsigned int del_dir_fd, file_fd;
+static unsigned int invalid_fd = 999;
+static unsigned int dir_fd;
 static struct old_linux_dirent dirp;
 static void setup(void);
 static void cleanup(void);
@@ -60,6 +67,11 @@ static struct test_case_t {
 } test_cases[] = {
        {&del_dir_fd, &dirp, sizeof(struct old_linux_dirent), ENOENT},
        {&file_fd, &dirp, sizeof(struct old_linux_dirent), ENOTDIR},
+       {&invalid_fd, &dirp, sizeof(struct old_linux_dirent), EBADF},
+#if !defined(UCLINUX)
+       {&dir_fd, (struct old_linux_dirent *)-1,
+        sizeof(struct old_linux_dirent), EFAULT},
+#endif
 };
 
 int TST_TOTAL = ARRAY_SIZE(test_cases);
@@ -102,6 +114,14 @@ static void setup(void)
        SAFE_RMDIR(cleanup, TEST_DIR);
 
        file_fd = SAFE_OPEN(cleanup, TEST_FILE, O_RDWR | O_CREAT, 0777);
+
+       SAFE_MKDIR(cleanup, TEST_DIR4, DIR_MODE);
+       dir_fd = SAFE_OPEN(cleanup, TEST_DIR4, O_RDONLY | O_DIRECTORY);
+
+#if !defined(UCLINUX)
+       test_cases[3].dirp = SAFE_MMAP(cleanup, 0, 1, PROT_NONE,
+                                      MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+#endif
 }
 
 static void readdir_verify(const struct test_case_t *test)
@@ -126,6 +146,9 @@ static void cleanup(void)
 {
        TEST_CLEANUP;
 
+       if (dir_fd > 0)
+               close(dir_fd);
+
        if (del_dir_fd > 0)
                close(del_dir_fd);
 
-- 
1.7.1




------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to