diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-11-23 18:57:48 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-11-23 18:57:48 +0000 |
commit | 0895bdb89c1674d01ecb9886a0624096ef939ad1 (patch) | |
tree | 4bcea896c4f2ef42c786490c685bef6941be19c8 /testsuites/psxtests/psxstat | |
parent | Removed. (diff) | |
download | rtems-0895bdb89c1674d01ecb9886a0624096ef939ad1.tar.bz2 |
Added tests in support of the file system infrastructure.
Diffstat (limited to '')
-rw-r--r-- | testsuites/psxtests/psxstat/main.c | 40 | ||||
-rw-r--r-- | testsuites/psxtests/psxstat/psxstat.scn | 1253 | ||||
-rw-r--r-- | testsuites/psxtests/psxstat/test.c | 834 |
3 files changed, 2127 insertions, 0 deletions
diff --git a/testsuites/psxtests/psxstat/main.c b/testsuites/psxtests/psxstat/main.c new file mode 100644 index 0000000000..37658f4feb --- /dev/null +++ b/testsuites/psxtests/psxstat/main.c @@ -0,0 +1,40 @@ +/* + * Simple test program -- simplified version of sample test hello. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#define TEST_INIT + +#include <bsp.h> + +void test_main( void ); + +rtems_task Init( + rtems_task_argument ignored +) +{ + test_main(); + exit( 0 ); +} + +/* configuration information */ + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <confdefs.h> + +/* end of file */ diff --git a/testsuites/psxtests/psxstat/psxstat.scn b/testsuites/psxtests/psxstat/psxstat.scn new file mode 100644 index 0000000000..6a18981e42 --- /dev/null +++ b/testsuites/psxtests/psxstat/psxstat.scn @@ -0,0 +1,1253 @@ +
+
+*** STAT TEST 01 ***
+>>>>Current Time: - rtems_clock_get - 09:00:00 12/31/1988
+Making directory /dir1
+Making directory /dir2
+Making directory /dir3
+Making directory /dir4
+Making directory /dir1/dir1
+Making directory /./././dir1/ dir1
+Making directory /./././links
+Making directory ///dir1/dir1/../../dir1/../symlinks/////
+
+Making file ////dir1/\//file1\\//
+Making file /dir1/file2
+Making file /dir1/file3
+Making file /dir1/file4
+Making file /dir1/dir1/file1
+Making file ../../..//dir1/./././dir1/ file1
+Making file main.c
+
+Making file dir1/dir1/../../links/dir1
+Making file links/dir2
+Making file links/dir3
+Making file links/dir4
+Making file links/dir1_dir1
+Making file links/dir1_ dir1
+Making file links/../links/../links/links
+
+Making file links/dir1_file1
+Making file links/dir1_file2
+Making file links/dir1_file3
+Making file links/dir1_file4
+Making file links/dir1_dir1_f1
+Making file links/dir1_dir1 f1
+
+Making file links/links/links/links_dir1
+Making file links//links_dir2
+Making file links//links_dir3
+Making file links//links_dir4
+Making file links//links_dir1_d1
+Making file links//links_dir1 d1
+Making file links//links_links
+
+Making file links///links_d1_file1
+Making file links///links_d1_file2
+Making file links///links_d1_file3
+Making file links///links_d1_file4
+Making file links///links_d1_d1_f1
+Making file links///links_r1_d1 f1
+
+Doing the stat() on all the good absolute paths
+stat( /dev ) returned
+ st_dev (0x0:0x0)
+ st_ino 2
+ st_mode 40771
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 28
+ st_atime Fri Jan 01 00:00:00 1988
+ st_mtime Fri Jan 01 00:00:00 1988
+ st_ctime Fri Jan 01 00:00:00 1988
+stat( ////dir1/\//file1\\// ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /dir1/\\/file2 ) returned
+ st_dev (0x0:0x0)
+ st_ino d
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /dir1/file3/////\\\ ) returned
+ st_dev (0x0:0x0)
+ st_ino e
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /dir1/file4 ) returned
+ st_dev (0x0:0x0)
+ st_ino f
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /dir1/dir1/file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 10
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /dir1/dir1/ file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 11
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 168
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /dir2//////\ ) returned
+ st_dev (0x0:0x0)
+ st_ino 5
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /dir3 ) returned
+ st_dev (0x0:0x0)
+ st_ino 6
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /dir4 ) returned
+ st_dev (0x0:0x0)
+ st_ino 7
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /dir1/dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 8
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 56
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /dir1/ dir1///\\ ) returned
+ st_dev (0x0:0x0)
+ st_ino 9
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /\/\/\/\/\/\/links\/\/\/\/\/\ ) returned
+ st_dev (0x0:0x0)
+ st_ino a
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 728
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+
+Doing the stat() on all the good relative paths
+stat( dev ) returned
+ st_dev (0x0:0x0)
+ st_ino 2
+ st_mode 40771
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 28
+ st_atime Fri Jan 01 00:00:00 1988
+ st_mtime Fri Jan 01 00:00:00 1988
+ st_ctime Fri Jan 01 00:00:00 1988
+stat( dir1/\//file1\\// ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( dir1/\\/file2 ) returned
+ st_dev (0x0:0x0)
+ st_ino d
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( dir1/file3/////\\\ ) returned
+ st_dev (0x0:0x0)
+ st_ino e
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( dir1/file4 ) returned
+ st_dev (0x0:0x0)
+ st_ino f
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( dir1/dir1/file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 10
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( dir1/dir1/ file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 11
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 168
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( dir2//////\ ) returned
+ st_dev (0x0:0x0)
+ st_ino 5
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( dir3 ) returned
+ st_dev (0x0:0x0)
+ st_ino 6
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( dir4 ) returned
+ st_dev (0x0:0x0)
+ st_ino 7
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( dir1/dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 8
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 56
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( dir1/ dir1///\\ ) returned
+ st_dev (0x0:0x0)
+ st_ino 9
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( main.c ) returned
+ st_dev (0x0:0x0)
+ st_ino 12
+ st_mode 100000
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:00 1988
+
+chdir to dev
+
+stat relative paths that are now bad
+stat( dev ) returned : No such file or directory
+stat( dir1/\//file1\\// ) returned : No such file or directory
+stat( dir1/\\/file2 ) returned : No such file or directory
+stat( dir1/file3/////\\\ ) returned : No such file or directory
+stat( dir1/file4 ) returned : No such file or directory
+stat( dir1/dir1/file1 ) returned : No such file or directory
+stat( dir1/dir1/ file1 ) returned : No such file or directory
+stat( dir1 ) returned : No such file or directory
+stat( dir2//////\ ) returned : No such file or directory
+stat( dir3 ) returned : No such file or directory
+stat( dir4 ) returned : No such file or directory
+stat( dir1/dir1 ) returned : No such file or directory
+stat( dir1/ dir1///\\ ) returned : No such file or directory
+stat( main.c ) returned : No such file or directory
+
+chdir to ../links
+Doing the stat() on good links
+
+stat( dir1/dir1/../../links/dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 168
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/dir2 ) returned
+ st_dev (0x0:0x0)
+ st_ino 5
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/dir3 ) returned
+ st_dev (0x0:0x0)
+ st_ino 6
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/dir4 ) returned
+ st_dev (0x0:0x0)
+ st_ino 7
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/dir1_dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 8
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 56
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/dir1_ dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 9
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/../links/../links/links ) returned
+ st_dev (0x0:0x0)
+ st_ino a
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 728
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links/dir1_file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links/dir1_file2 ) returned
+ st_dev (0x0:0x0)
+ st_ino d
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links/dir1_file3 ) returned
+ st_dev (0x0:0x0)
+ st_ino e
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links/dir1_file4 ) returned
+ st_dev (0x0:0x0)
+ st_ino f
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links/dir1_dir1_f1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 10
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links/dir1_dir1 f1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 11
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links/links/links/links_dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 168
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links//links_dir2 ) returned
+ st_dev (0x0:0x0)
+ st_ino 5
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links//links_dir3 ) returned
+ st_dev (0x0:0x0)
+ st_ino 6
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links//links_dir4 ) returned
+ st_dev (0x0:0x0)
+ st_ino 7
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links//links_dir1_d1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 8
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 56
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links//links_dir1 d1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 9
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links//links_links ) returned
+ st_dev (0x0:0x0)
+ st_ino a
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 728
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( links///links_d1_file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links///links_d1_file2 ) returned
+ st_dev (0x0:0x0)
+ st_ino d
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links///links_d1_file3 ) returned
+ st_dev (0x0:0x0)
+ st_ino e
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links///links_d1_file4 ) returned
+ st_dev (0x0:0x0)
+ st_ino f
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links///links_d1_d1_f1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 10
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( links///links_r1_d1 f1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 11
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+chmod of /dir1/dir1 to Read/Write
+
+Doing the stat() on all the bad paths
+stat( /links/ENAMETOOLONG___ ) returned : File or path name too long
+stat( /dir1/file4/NOTADIR ) returned : Not a directory
+stat( /dir1/dir1/EACCES__ ) returned : Permission denied
+Making file /links/ENAMETOOLONG___ : File or path name too long
+Making file /dir1/file4/NOTADIR : Not a directory
+Making file /dir1/dir1/EACCES__ : Permission denied
+
+Return /dir1/dir1 to RWX
+Making file /symlinks/a_file_symlink
+
+Making file /symlinks/a_dir_symlink
+
+Making file /symlinks/a_link_symlink
+
+Making file ../symlinks/no_file
+
+Making file /symlinks/links
+
+stat( /symlinks/a_file_symlink ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:10 1988
+stat( /symlinks/a_dir_symlink ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 168
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( /symlinks/a_link_symlink ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 168
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:05 1988
+stat( ../symlinks/no_file ) returned : No such file or directory
+Making file 1
+
+Making file 2
+
+Making file 3
+
+Making file 4
+
+Making file 5
+
+Making file 6
+
+Making file 7
+
+Making file 8
+
+Making file 9
+
+stat( 1 ) returned
+ st_dev (0x0:0x0)
+ st_ino b
+ st_mode 40700
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 140
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:00 1988
+stat( 2 ) returned
+ st_dev (0x0:0x0)
+ st_ino b
+ st_mode 40700
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 140
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:00 1988
+stat( 3 ) returned
+ st_dev (0x0:0x0)
+ st_ino b
+ st_mode 40700
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 140
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:00 1988
+stat( 4 ) returned
+ st_dev (0x0:0x0)
+ st_ino b
+ st_mode 40700
+ st_nlink 1
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 140
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:00 1988
+stat( 5 ) returned : Too many symbolic links
+stat( 6 ) returned : Too many symbolic links
+stat( 7 ) returned : Too many symbolic links
+stat( 8 ) returned : Too many symbolic links
+stat( 9 ) returned : Too many symbolic links
+
+
+Pass an invalid mode to chmod should fail with EPERM
+chdir to a file should fail with ENOTDIR
+Verify RWX permission on /dir1 via access
+chmod of /dir1 to Read/Write
+chmod fred should fail with ENOENT
+Create under /dir1 should fail with EACCES
+chdir to /dir1/dir1 should fail with EACCES
+Stat with a NULL buffer should fail with EFAULT
+
+
+chmod of /dir1 to Read/Write
+mkdir /dir1/BADNAME should fail with EACCESS
+
+/dir1 Should exist ( access )
+
+/dir1 Should have read permission( access )
+
+/dir1 Should have write permission( access )
+
+/dir1 Should not have execute permission( access )
+
+Restore /dir1 to RWX
+chdir to /
+Remove /./././dir1/ dir1
+stat( /./././dir1/ dir1 ) returned : No such file or directory
+stat( links/dir1_ dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 9
+ st_mode 40700
+ st_nlink 2
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:20 1988
+stat( links//links_dir1 d1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 9
+ st_mode 40700
+ st_nlink 2
+ st_uid 0
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:20 1988
+Chdir to links/dir1_ dir1
+Chdir to .. should fail with ENOENT
+mkdir ../t should fail with ENOENT
+mkdir t
+chdir to /
+rmdir links/dir1_ dir1 should fail with ENOTDIR
+unlink links/dir1_ dir1
+unlink links//links_dir1 d1 should fail with ENOTEMPTY
+rmdir links//links_dir1 d1/t
+unlink links/dir1_ dir1
+Attempting to mount IMFS file system at /dir1/my_mount_point
+rmdir /dir1/my_mount_point should fail with EBUSY
+Unmount /dir1/my_mount_point
+chmod of ////dir1/\//file1\\// to group and other execute
+Open ////dir1/\//file1\\// for write should fail with EACCES
+ Making too many hard links.
+Making file /LinkName1
+Making file /LinkName2
+Making file /LinkName3
+Making file /LinkName4
+Making file /LinkName5
+Making file /LinkName6
+Making file /LinkName7
+Making file /LinkName8
+pass fstat a null pointer should fail with EFAULT
+chdir to /
+Change group of ////dir1/\//file1\\//
+stat( ////dir1/\//file1\\// ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100011
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of ////dir1/\//file1\\//
+stat( ////dir1/\//file1\\// ) returned
+ st_dev (0x0:0x0)
+ st_ino c
+ st_mode 100011
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of /dir1/file2
+stat( /dir1/file2 ) returned
+ st_dev (0x0:0x0)
+ st_ino d
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of /dir1/file2
+stat( /dir1/file2 ) returned
+ st_dev (0x0:0x0)
+ st_ino d
+ st_mode 100000
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of /dir1/file3
+stat( /dir1/file3 ) returned
+ st_dev (0x0:0x0)
+ st_ino e
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of /dir1/file3
+stat( /dir1/file3 ) returned
+ st_dev (0x0:0x0)
+ st_ino e
+ st_mode 100000
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of /dir1/file4
+stat( /dir1/file4 ) returned
+ st_dev (0x0:0x0)
+ st_ino f
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of /dir1/file4
+stat( /dir1/file4 ) returned
+ st_dev (0x0:0x0)
+ st_ino f
+ st_mode 100000
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of /dir1/dir1/file1
+stat( /dir1/dir1/file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 10
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of /dir1/dir1/file1
+stat( /dir1/dir1/file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 10
+ st_mode 100000
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of ../../..//dir1/./././dir1/ file1
+stat( ../../..//dir1/./././dir1/ file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 11
+ st_mode 100000
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of ../../..//dir1/./././dir1/ file1
+stat( ../../..//dir1/./././dir1/ file1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 11
+ st_mode 100000
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of main.c
+stat( main.c ) returned
+ st_dev (0x0:0x0)
+ st_ino 12
+ st_mode 100000
+ st_nlink 1
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change owner of main.c
+stat( main.c ) returned
+ st_dev (0x0:0x0)
+ st_ino 12
+ st_mode 100000
+ st_nlink 1
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:25 1988
+Change group of dir1/dir1/../../links/dir1
+stat( dir1/dir1/../../links/dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 4
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 196
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change owner of dir1/dir1/../../links/dir1
+stat( dir1/dir1/../../links/dir1 ) returned : Permission denied
+Change group of links/dir2
+stat( links/dir2 ) returned
+ st_dev (0x0:0x0)
+ st_ino 5
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change owner of links/dir2
+stat( links/dir2 ) returned
+ st_dev (0x0:0x0)
+ st_ino 5
+ st_mode 40700
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change group of links/dir3
+stat( links/dir3 ) returned
+ st_dev (0x0:0x0)
+ st_ino 6
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change owner of links/dir3
+stat( links/dir3 ) returned
+ st_dev (0x0:0x0)
+ st_ino 6
+ st_mode 40700
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change group of links/dir4
+stat( links/dir4 ) returned
+ st_dev (0x0:0x0)
+ st_ino 7
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change owner of links/dir4
+stat( links/dir4 ) returned
+ st_dev (0x0:0x0)
+ st_ino 7
+ st_mode 40700
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 0
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change group of links/dir1_dir1
+stat( links/dir1_dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 8
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 56
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change owner of links/dir1_dir1
+stat( links/dir1_dir1 ) returned
+ st_dev (0x0:0x0)
+ st_ino 8
+ st_mode 40700
+ st_nlink 3
+ st_uid 1
+ st_gid 0
+ st_rdev (0x0:0x0)
+ st_size 56
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change group of links/dir1_ dir1
+stat( links/dir1_ dir1 ) returned : No such file or directory
+Change owner of links/dir1_ dir1
+stat( links/dir1_ dir1 ) returned : No such file or directory
+Change group of links/../links/../links/links
+stat( links/../links/../links/links ) returned
+ st_dev (0x0:0x0)
+ st_ino a
+ st_mode 40700
+ st_nlink 3
+ st_uid 0
+ st_gid 1
+ st_rdev (0x0:0x0)
+ st_size 924
+ st_atime Sat Dec 31 09:00:00 1988
+ st_mtime Sat Dec 31 09:00:00 1988
+ st_ctime Sat Dec 31 09:00:30 1988
+Change owner of links/../links/../links/links
+stat( links/../links/../links/links ) returned : Permission denied
+
+
+*** END OF STAT TEST 01 ***
diff --git a/testsuites/psxtests/psxstat/test.c b/testsuites/psxtests/psxstat/test.c new file mode 100644 index 0000000000..db9f47f348 --- /dev/null +++ b/testsuites/psxtests/psxstat/test.c @@ -0,0 +1,834 @@ +/* + * This test exercises stat() via fstat() and generates as many of the + * path evaluation cases as possible. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <tmacros.h> +#include <assert.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <limits.h> +#include <stdio.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#include <rtems.h> +#include <rtems/libio.h> + +#define MAXSYMLINK 5 /* There needs to be a better way of getting this. */ + +/* + * List of files which should exist. + */ + +char *Files[] = { + "////dir1/\\//file1\\\\//", + "/dir1/file2", + "/dir1/file3", + "/dir1/file4", + "/dir1/dir1/file1", + "../../..//dir1/./././dir1/ file1", + "main.c", + 0 +}; + +/* + * List of directories which should exist. + */ + +char *Directories[] = { + "/dir1", + "/dir2", + "/dir3", + "/dir4", + "/dir1/dir1", + "/./././dir1/ dir1", + "/./././links", + "///dir1/dir1/../../dir1/../symlinks/////", + 0 +}; + +char *Links_to_Dirs[]= { + "dir1/dir1/../../links/dir1", + "links/dir2", + "links/dir3", + "links/dir4", + "links/dir1_dir1", + "links/dir1_ dir1", + "links/../links/../links/links", + 0 +}; + +char *Links_to_Files[]= { + "links/dir1_file1", + "links/dir1_file2", + "links/dir1_file3", + "links/dir1_file4", + "links/dir1_dir1_f1", + "links/dir1_dir1 f1", + 0 +}; + +char *Links_to_dirlinks[]= { + "links/links/links/links_dir1", + "links//links_dir2", + "links//links_dir3", + "links//links_dir4", + "links//links_dir1_d1", + "links//links_dir1 d1", + "links//links_links", + 0 +}; + +char *Links_to_filelinks[]= { + "links///links_d1_file1", + "links///links_d1_file2", + "links///links_d1_file3", + "links///links_d1_file4", + "links///links_d1_d1_f1", + "links///links_r1_d1 f1", + 0 +}; + +char *SymLinks[]= { + "/symlinks/a_file_symlink", + "/symlinks/a_dir_symlink", + "/symlinks/a_link_symlink", + "../symlinks/no_file", + "/symlinks/a_dir_symlink/a_file_symlink", + 0 +}; + +/* + * List of absolute paths to stat. + */ + +char *Good_absolute_paths[] = { + "/dev", + "////dir1/\\//file1\\\\//", + "/dir1/\\\\/file2", + "/dir1/file3/////\\\\\\", + "/dir1/file4", + "/dir1/dir1/file1", + "/dir1/dir1/ file1", + "/dir1", + "/dir2//////\\", + "/dir3", + "/dir4", + "/dir1/dir1", + "/dir1/ dir1///\\\\", + "/\\/\\/\\/\\/\\/\\/links\\/\\/\\/\\/\\/\\", + 0 +}; + + +char *Bad_paths[] = { + "/links/ENAMETOOLONG___", + "/dir1/file4/NOTADIR", + "/dir1/dir1/EACCES__", + 0 +}; + +/* + * List of relative paths to stat. + */ + +char *Good_relative_paths[] = { + "dev", + "dir1/\\//file1\\\\//", + "dir1/\\\\/file2", + "dir1/file3/////\\\\\\", + "dir1/file4", + "dir1/dir1/file1", + "dir1/dir1/ file1", + "dir1", + "dir2//////\\", + "dir3", + "dir4", + "dir1/dir1", + "dir1/ dir1///\\\\", + "main.c", + 0 +}; + +/* + * Do a stat on a single file and report the status. + */ + +void stat_a_file( + const char *file +) +{ + int status; + struct stat statbuf; + int major1; + int minor1; + int major2; + int minor2; + + + assert( file ); + + printf( "stat( %s ) returned ", file ); + fflush( stdout ); + + status = stat( file, &statbuf ); + + if ( status == -1 ) { + printf( ": %s\n", strerror( errno ) ); + } else { + + rtems_filesystem_split_dev_t( statbuf.st_dev, major1, minor1 ); + rtems_filesystem_split_dev_t( statbuf.st_rdev, major2, minor2 ); + + + printf("\n st_dev (0x%x:0x%x)\n", major1, minor1 ); + printf( " st_ino %x\n", statbuf.st_ino ); + printf( " st_mode %o\n", statbuf.st_mode ); + printf( " st_nlink %x\n", statbuf.st_nlink ); + printf( " st_uid %d\n", statbuf.st_uid ); + printf( " st_gid %d\n", statbuf.st_gid ); + printf( " st_rdev (0x%x:0x%x)\n", major2, minor2 ); + printf( " st_size %d\n",(unsigned int) statbuf.st_size ); + printf( " st_atime %s", ctime( &statbuf.st_atime ) ); + printf( " st_mtime %s", ctime( &statbuf.st_mtime ) ); + printf( " st_ctime %s", ctime( &statbuf.st_ctime ) ); +#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__) + printf( " st_blksize %x\n", statbuf.st_blksize ); + printf( " st_blocks %x\n", statbuf.st_blocks ); +#endif + + } +} + +/* + * stat() multiple files at a time + */ + +void stat_multiple_files( + char **files +) +{ + int i; + + i = 0; + while ( files[i] ) { + stat_a_file( files[i] ); + i++; + } +} + +/* + * chown() multiple files at a time + */ +void chown_multiple_files( + char **files +) +{ + int i; + uid_t st_uid; + gid_t st_gid; + +#if defined(RTEMS_POSIX_API) + st_uid = geteuid(); + st_gid = getegid(); +#else + st_uid = 100; + st_gid = 0; +#endif + + i = 0; + while ( files[i] ) { + printf("Change group of %s\n", files[i]); + chown( files[i], st_uid, (st_gid+1) ); + stat_a_file( files[i] ); + + printf("Change owner of %s\n", files[i]); + chown( files[i], (st_uid+1), st_gid ); + stat_a_file( files[i] ); + i++; + } + +} + + + +/* + * mknod() multiple files at a time + */ + +void make_multiple_files( + char **files +) +{ + int i; + int status; + + i = 0; + while ( files[i] ) { + printf( "Making file %s\n", files[i] ); + status = mknod( files[i], ( S_IFREG | S_IROTH|S_IWOTH ), 0LL ); + assert( !status ); + i++; + } + puts( "" ); +} + +void make_multiple_bad_files( + char **files +) +{ + int i; + int status; + + i = 0; + while ( files[i] ) { + printf( "Making file %s ", files[i] ); + status = mknod( files[i], ( S_IFREG | S_IROTH|S_IWOTH ), 0LL ); + assert( status ); + printf( ": %s\n", strerror( errno ) ); + i++; + } + puts( "" ); +} + +void make_multiple_links( + char **existing, + char **new +) +{ + int i; + int status; + + i = 0; + while ( new[i] && existing[i] ) { + printf( "Making file %s\n", new[i] ); + status = link( existing[i], new[i] ); + assert( !status ); + i++; + } + puts( "" ); + + status = link( "fred", "bob" ); + assert( status == -1 ); + + status = link( existing[1], "doug/bob" ); + assert( status == -1 ); +} + + +void make_too_many_links() +{ + int i; + int status; + char name [20]; + + status = mkdir("/dummy", S_IRWXU ); + assert( status == 0 ); + + for (i=1; i<= LINK_MAX; i++) { + + sprintf(name,"/LinkName%d",i); + printf( "Making file %s\n", name ); + status = link("/dummy" , name ); + if( i < LINK_MAX ) + assert( !status ); + else + assert( status == -1 ); + + } +} + + +void make_a_symlink( + char *existing, + char *new +) +{ + int status; + char buf[100]; + int len; + + memset( buf, 0, 100 ); + + printf( "Making file %s\n", new ); + status = symlink( existing, new ); + assert( !status ); + + printf( "Verify with readlink\n"); + status = readlink( new, buf, 100 ); + len = strlen( existing ); + assert ( status == len ); + + status = readlink( new, buf, 3 ); + len = strlen( existing ); + if (len < 3 ) + assert( status == len ); + else + assert( status == 3 ); + + status = strcmp( existing, buf ); + assert( !status ); +} + +void make_multiple_symlinks() +{ + int status; + + make_a_symlink( Files[0], SymLinks[0] ); + make_a_symlink( Directories[0], SymLinks[1] ); + make_a_symlink( Links_to_dirlinks[0], SymLinks[2] ); + make_a_symlink( "No_File", SymLinks[3] ); + make_a_symlink( SymLinks[1], SymLinks[4] ); + make_a_symlink( "//links", "/symlinks/links" ); + + stat_a_file( SymLinks[0] ); + stat_a_file( SymLinks[1] ); + stat_a_file( SymLinks[2] ); + stat_a_file( SymLinks[3] ); + stat_a_file( SymLinks[4] ); + + status = symlink( "//links", "bob/frank" ); + assert (status == -1); + +} +/* +void make_too_many_symlinks() +{ + int i, status; + char name1[8]; + + for (i=1; i <= MAXSYMLINK; i++) { + sprintf( name1, "SymLink%d", i ); + status = symlink( "/dummy", name1 ); + if( i < MAXSYMLINK ) + assert( !status ); + else + assert( status == -1 ); + } +} +*/ +void make_many_symlinks( + char *real_file, + int link_count +) +{ + int i; + char name1[5]; + char name2[5]; + char *link_file; + + link_file = real_file; + for (i=1; i < link_count; i++) { + sprintf( name1, "%d", i ); + make_a_symlink( link_file, name1 ); + strcpy( name2, name1 ); + link_file = name2; + } + + for (i=1; i < link_count; i++) { + sprintf( name1, "%d", i ); + stat_a_file( name1 ); + } + +} + +/* + * mkdir() multiple directories at a time + */ + +void make_multiple_directories( + char **files +) +{ + int i; + int status; + + i = 0; + while ( files[i] ) { + printf( "Making directory %s\n", files[i] ); + status = mkdir( files[i], S_IRWXU ); + assert( !status ); + i++; + } + puts( "" ); +} + +/* + * Cause faults. + */ + + +void Cause_faults() +{ + int fd; + int status; + char longer_name[100]; + rtems_filesystem_mount_table_entry_t *mt_entry; + + /* + * Verify chmod with an invalid type. + */ + + printf("\n\nPass an invalid mode to chmod should fail with EPERM \n" ); + status = chmod( Files[0], S_IFREG ); + assert( status == -1 ); + assert( errno == EPERM ); + + /* + * Try to chdir to a file. + */ + + printf("chdir to a file should fail with ENOTDIR\n"); + status = chdir( Files[0] ); + assert( status == -1 ); + assert( errno == ENOTDIR ); + + /* + * Change mode to read/write on a directory. + * Verify directory works properly. + */ + + printf("Verify RWX permission on %s via access\n", Directories[0]); + status = access( Directories[0], ( R_OK | W_OK | X_OK ) ); + assert( status == 0 ); + + printf( "chmod of %s to Read/Write\n", Directories[0] ); + status = chmod( Directories[0], (S_IXGRP | S_IXOTH) ); + assert( status == 0 ); + + printf( "chmod fred should fail with ENOENT\n" ); + status = chmod( "fred", (S_IXGRP | S_IXOTH) ); + assert( status == -1 ); + assert( errno == ENOENT ); + + strcpy(longer_name, Directories[0] ); + strcat(longer_name, "/BADNAME" ); + printf( "Create under %s should fail with EACCES\n", Directories[0] ); + status = mkdir( longer_name , S_IRWXU ); + assert( status == -1 ); + assert( errno == EACCES ); + + printf("chdir to %s should fail with EACCES\n", Directories[4] ); + status = chdir( Directories[4] ); + assert( status == -1 ); + assert( errno == EACCES ); + + /* + * Check stat with a NULL buffer. + */ + + printf("Stat with a NULL buffer should fail with EFAULT\n"); + status = stat( Directories[0], NULL ); + assert( status == -1 ); + assert( errno == EFAULT ); + + /* + * Set current to a directory with no owner permissions. + * Verify it works properly. + */ + + printf( "\n\nchmod of %s to Read/Write\n", Directories[0] ); + status = chmod( Directories[0], (S_IXGRP | S_IXOTH) ); + assert( status == 0 ); + + printf("mkdir %s should fail with EACCESS\n", longer_name ); + status = mkdir( longer_name , S_IRWXU ); + assert( status == -1 ); + assert( errno == EACCES ); + + printf("\n%s Should exist ( access )\n",Directories[0] ); + status = access( Directories[0], F_OK ); + assert( status == 0 ); + printf("\n%s Should have read permission( access )\n",Directories[0] ); + status = access( Directories[0], R_OK ); + assert( status != 0 ); + printf("\n%s Should have write permission( access )\n",Directories[0] ); + status = access( Directories[0], W_OK ); + assert( status != 0 ); + printf("\n%s Should not have execute permission( access )\n",Directories[0] ); + status = access( Directories[0], X_OK ); + assert( status != 0 ); + + printf("\nRestore %s to RWX\n",Directories[0] ); + status = chmod( Directories[0], S_IRWXU ); + assert( status == 0 ); + + printf("chdir to / \n"); + status = chdir( "/" ); + assert( status == 0 ); + + /* + * Remove one of the directories. + * Verify links to the removed directory still work. + */ + + printf( "Remove %s\n", Directories[5] ); + status = rmdir( Directories[5] ); + assert( status == 0 ); + + stat_a_file( Directories[5] ); + status = access( Directories[5], F_OK ); + assert( status != 0 ); + + stat_a_file( Links_to_Dirs[5] ); + status = readlink( Links_to_Dirs[5], longer_name, 3 ); + assert( status == -1 ); + assert( errno == EINVAL ); + + stat_a_file( Links_to_dirlinks[5] ); + printf("Chdir to %s\n", Links_to_Dirs[5] ); + status = chdir( Links_to_Dirs[5] ); + assert( status == 0 ); + + /* + * Verify we cannot move up from a node with no parent node. + */ + + printf("Chdir to .. should fail with ENOENT\n" ); + status = chdir( ".." ); + assert( status == -1 ); + assert( errno == ENOENT ); + + /* + * Create a subdirectory under the dangling node. + */ + + printf("mkdir ../t should fail with ENOENT\n" ); + status = mkdir( "../t" , S_IRWXU ); + assert( status == -1 ); + assert( errno == ENOENT ); + + printf("mkdir t\n"); + status = mkdir( "t" , S_IRWXU ); + assert( status == 0 ); + + printf("chdir to / \n"); + status = chdir( "/" ); + assert( status == 0 ); + + /* + * Check rmdir, rmnod, and unlink + */ + + printf("rmdir %s should fail with ENOTDIR\n", Links_to_Dirs[5] ); + status = rmdir( Links_to_Dirs[5] ); + assert( status == -1 ); + assert( errno == ENOTDIR ); + + printf("unlink %s\n", Links_to_Dirs[5] ); + status = unlink( Links_to_Dirs[5] ); + assert( status == 0 ); + + printf("unlink %s should fail with ENOTEMPTY\n", Links_to_dirlinks[5] ); + status = unlink( Links_to_dirlinks[5] ); + assert( status == -1 ); + assert( errno == ENOTEMPTY ); + + strcpy( longer_name, Links_to_dirlinks[5] ); + strcat( longer_name, "/t"); + printf("rmdir %s\n", longer_name ); + status = rmdir( longer_name ); + assert( status == 0 ); + + printf("unlink %s\n", Links_to_Dirs[5]); + status = unlink( Links_to_dirlinks[5] ); + assert( status == 0 ); + + status = chdir( Directories[0] ); + status = mkdir ( "my_mount_point", S_IRWXU ); + assert( status == 0 ); + + printf("Attempting to mount IMFS file system at /dir1/my_mount_point \n"); + status = mount( + &mt_entry, + &IMFS_ops, + "RW", + NULL, + "/dir1/my_mount_point" ); + assert( status == 0 ); + + printf("rmdir /dir1/my_mount_point should fail with EBUSY\n"); + status = rmdir ("/dir1/my_mount_point" ); + assert( status == -1 ); + assert( errno == EBUSY ); + + printf( "Unmount /dir1/my_mount_point\n"); + status = unmount( "/dir1/my_mount_point" ); + assert( status == 0 ); + + /* + * Verify write permission is checked. + */ + + printf("chmod of %s to group and other execute\n", Files[0] ); + status = chmod (Files[0], (S_IXGRP | S_IXOTH) ); + assert( status == 0 ); + + printf("Open %s for write should fail with EACCES\n", Files[0] ); + fd = open (Files[0], O_WRONLY); + assert( fd == -1 ); + assert( errno == EACCES ); + + printf("chmod of %s to User Execute and Read\n", Directories[3] ); + status = chmod (Directories[3], (S_IXUSR | S_IRUSR) ); + assert( status == 0 ); + strcpy(longer_name, Directories[3] ); + strcat(longer_name, "/NewFile" ); + printf("Mkdir of %s should fail with EACCES\n",longer_name ); + status = mkdir( longer_name, S_IRWXU ); + assert( status != 0 ); + assert( errno == EACCES ); + + printf(" Making too many hard links.\n" ); + make_too_many_links( ); + + printf( "pass fstat a null pointer should fail with EFAULT\n"); + status = fstat( fd, NULL ); + assert( status == -1 ); + assert( errno == EFAULT); + + /* + * The current directory MUST be restored at the end of this test. + */ + + printf("chdir to / \n"); + status = chdir( "/" ); + assert( status == 0 ); + +} + +void Show_Time() +{ + rtems_time_of_day time; + rtems_status_code status; + + status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); + printf(">>>>Current Time: "); + print_time( " - rtems_clock_get - ", &time, "\n" ); +} + +/* + * main entry point to the test + */ + +#if defined(__rtems__) +int test_main(void) +#else +int main( + int argc, + char **argv +) +#endif +{ + rtems_status_code status; + rtems_time_of_day time; + + puts( "\n\n*** STAT TEST 01 ***" ); + + build_time( &time, 12, 31, 1988, 9, 0, 0, 0 ); + status = rtems_clock_set( &time ); + + /* + * Create the files and directories for the test. + */ + Show_Time(); + + make_multiple_directories( Directories ); + make_multiple_files( Files ); + make_multiple_links( Directories, Links_to_Dirs ); + make_multiple_links( Files, Links_to_Files ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + make_multiple_links( Links_to_Dirs, Links_to_dirlinks ); + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + make_multiple_links( Links_to_Files, Links_to_filelinks ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + + /* + * Now go through all the absolute path. + */ + + puts( "Doing the stat() on all the good absolute paths" ); + stat_multiple_files( Good_absolute_paths ); + + /* + * run through the relative paths. + */ + + puts( "\nDoing the stat() on all the good relative paths" ); + stat_multiple_files( Good_relative_paths ); + + /* + * Change directory and releative paths are now bad. + */ + + puts("\nchdir to dev"); + chdir("dev"); + puts("\nstat relative paths that are now bad"); + stat_multiple_files( Good_relative_paths ); + + /* + * Change directory to the link directory and follow links. + */ + + puts("\nchdir to ../links"); + chdir("../links"); + puts("Doing the stat() on good links\n"); + stat_multiple_files( Links_to_Dirs ); + stat_multiple_files( Links_to_Files ); + stat_multiple_files( Links_to_dirlinks ); + stat_multiple_files( Links_to_filelinks ); + + /* + * Chmod on dir1/dir1. This allows the error path to be hit. + */ + + printf( "chmod of %s to Read/Write\n", Directories[4] ); + chmod( Directories[4], (S_IROTH|S_IWOTH) ); + puts( "\nDoing the stat() on all the bad paths" ); + + stat_multiple_files( Bad_paths ); + make_multiple_bad_files( Bad_paths ); + + printf( "Return %s to RWX\n", Directories[4] ); + chmod( Directories[4], S_IRWXU ); + + + /* + * Check out symbolic links. + */ + + make_multiple_symlinks(); + make_many_symlinks( "/symlinks", 10 ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + Cause_faults(); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + chown_multiple_files( Files ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + chown_multiple_files( Links_to_Dirs ); + + puts( "\n\n*** END OF STAT TEST 01 ***" ); + exit(0); +} + + + + + + + |