summaryrefslogtreecommitdiffstats
path: root/testsuites/psxtests/psxstat
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-11-23 18:57:48 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-11-23 18:57:48 +0000
commit0895bdb89c1674d01ecb9886a0624096ef939ad1 (patch)
tree4bcea896c4f2ef42c786490c685bef6941be19c8 /testsuites/psxtests/psxstat
parentRemoved. (diff)
downloadrtems-0895bdb89c1674d01ecb9886a0624096ef939ad1.tar.bz2
Added tests in support of the file system infrastructure.
Diffstat (limited to 'testsuites/psxtests/psxstat')
-rw-r--r--testsuites/psxtests/psxstat/main.c40
-rw-r--r--testsuites/psxtests/psxstat/psxstat.scn1253
-rw-r--r--testsuites/psxtests/psxstat/test.c834
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);
+}
+
+
+
+
+
+
+