summaryrefslogtreecommitdiffstats
path: root/c/src/tests/psxtests/psxreaddir/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/tests/psxtests/psxreaddir/test.c')
-rw-r--r--c/src/tests/psxtests/psxreaddir/test.c503
1 files changed, 0 insertions, 503 deletions
diff --git a/c/src/tests/psxtests/psxreaddir/test.c b/c/src/tests/psxtests/psxreaddir/test.c
deleted file mode 100644
index bc790c5233..0000000000
--- a/c/src/tests/psxtests/psxreaddir/test.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
- * This is a native test to explore how the readdir() family works.
- * Newlib supports the following readdir() family members:
- *
- * closedir() -
- * readdir() -
- * scandir() -
- * opendir() -
- * rewinddir() -
- * telldir() - BSD not in POSIX
- * seekdir() - BSD not in POSIX
- *
- *
- * seekdir() takes an offset which is a byte offset. The Linux
- * implementation of this appears to seek to the ((off/DIRENT_SIZE) + 1)
- * record where DIRENT_SIZE seems to be 12 bytes.
- *
- *
- *
- * $Id$
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <string.h>
-#include <assert.h>
-#include <unistd.h>
-#include <errno.h>
-#include <imfs.h>
-#include <assert.h>
-
-DIR *directory;
-DIR *directory2;
-DIR *directory3;
-DIR *directory_not;
-
-#ifndef __P
-#define __P(args)()
-#endif
-
-/*
-int scandir ( const char *dirname,
- struct dirent *** namelist,
- int (*select) __P((struct dirent *)),
- int (*dcomp) __P((const struct dirent **, const struct dirent **))
-);
-*/
-
-#if defined(__rtems__)
-#define d_type d_reclen
-#include <pmacros.h>
-#endif
-
-void printdir( DIR *directory )
-{
- struct dirent *d;
-
- printf( "%-20s %8s %8s %8s %4s\n",
- "name", " inode", " offset", "reclen", " type" );
- d = readdir(directory);
-
- while (d) {
- printf( "%-20s %8d %8d %6d 0x%04x\n",
- d->d_name, (int)d->d_ino, (int)d->d_off, d->d_reclen, d->d_type );
- d = readdir(directory);
-
- }
-}
-
-void complete_printdir( char *path )
-{
- DIR *the_dir;
- int status;
-
- the_dir = opendir( path );
- assert( the_dir );
- printdir( the_dir );
- status = closedir( the_dir );
-}
-
-char *many_files[] = {
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z",
- "aa",
- "ab",
- "ac",
- "ad",
- "ae",
- "af",
- "ag",
- "ah",
- "ai",
- "aj",
- "ak",
- "al",
- "am",
- "an",
- "ao",
- "ap",
- "aq",
- "ar"
-};
-
-char *dnames[] = {
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "c/y",
- "c/z",
- "c/x",
- "c/y/a3333",
- "c/y/j123",
- "END"
-};
-
-int select1 ( struct dirent *entry )
-{
- printf("SCANDIR SELECT1 accepts nodename: %s\n", entry->d_name );
- return 1;
-}
-
-int select2 ( struct dirent *entry )
-{
- if( strcmp( entry->d_name, "y") == 0 ) {
- printf("SCANDIR SELECT accepted nodename: %s\n", entry->d_name );
- return 1;
- }
- printf("SCANDIR SELECT rejected nodename: %s\n", entry->d_name );
- return 0;
-}
-
-int compare_ascending(const struct dirent **a, const struct dirent **b )
-{
- int i;
-
- i = strcmp (
- (char *)((struct dirent *)(*a)->d_name),
- (char *)((struct dirent *)(*b)->d_name)
- );
- return i;
-}
-
-
-int compare_descending( const struct dirent **a, const struct dirent **b )
-{
- int i;
-
- i = strcmp (
- (char *)((const struct dirent *)(*b)->d_name),
- (char *)((const struct dirent *)(*a)->d_name)
- );
-
- return i;
-}
-
-void test_across_mount()
-{
- rtems_filesystem_mount_table_entry_t *mt_entry;
- int status;
-
- /*
- * Verify Readdir works correctly over mount points.
- */
-
- printf("Validate readdir across mount point\n");
- assert( mkdir( "/imfs", 0777 ) == 0 );
- assert( mkdir( "/imfs/should_be_hidden", 0777 ) == 0 );
- complete_printdir("/imfs" );
- printf("Attempting to mount IMFS file system at /imfs \n");
- status = mount(
- &mt_entry,
- &IMFS_ops,
- RTEMS_FILESYSTEM_READ_WRITE,
- NULL,
- "/imfs" );
- assert( status == 0 );
- if( mt_entry == NULL ){
- printf(" NULL mount table entry was returned\n");
- }
- printf( "create /imfs/testdir and /imfs/testdir/testsubdir\n");
-
- status = mkdir( "/imfs/testdir", 0777 );
- assert( status == 0 );
- status = mkdir( "/imfs/testdir/testsubdir", 0777 );
- assert( status == 0 );
-
- complete_printdir("/imfs" );
- complete_printdir("/imfs/" );
- complete_printdir("/imfs/." );
- complete_printdir("/imfs/testdir" );
- complete_printdir("/imfs/testdir/.." );
-}
-
-#if defined(__rtems__)
-int test_main(void)
-#else
-int main(
- int argc,
- char **argv
-)
-#endif
-{
- int fd;
- int i;
- int status;
- off_t off;
- struct dirent *d_not;
- struct dirent **namelist;
- struct stat s;
-
-
- printf( "\n\n*** READDIR TEST ***\n" );
-
- printf( "\nchdir to the root directory\n" );
- status = chdir( "/" );
- printf( "chdir() status : %d\n\n", status );
-
- printf( "\nCreating a series of directories under /\n" );
- i=0;
- while ( strcmp(dnames[i], "END") != 0 )
- {
- status = mkdir( dnames[i], 0x1c0 );
- printf("Creating directory: %s %d %d ", dnames[i], status, errno );
- if ( errno == 0 )
- printf(" Success\n");
- else
- printf(" Failure\n");
-
- i++;
- }
-
- /*
- * Create files under many and open the directory.
- */
-
- printf("Create a lot of files\n");
- status = mkdir( "/many", 0x1c0 );
- status = chdir( "/many" );
- for (i = 0; i<44; i++) {
- printf("Create %s\n", many_files[i]);
- fd = open (many_files[i], O_CREAT, S_IRWXU);
- close (fd);
- }
- printf("Open /many and print the directory\n");
- directory_not = opendir( "/many" );
- printdir ( directory_not );
- d_not = readdir( directory_not );
-
- printf("open /b/myfile\n");
- fd = open ("/b/my_file", O_CREAT, S_IRWXU);
- assert( fd != -1 );
- close (fd);
-
- printf("scandir a file status: ");
- status = scandir(
- "/b/my_file",
- &namelist,
- select1,
- NULL
- );
- printf("%d\n", status);
-
- printf("Open /b/new_file\n");
- fd = open( "/b/new_file", O_CREAT, S_IRWXU );
- assert( fd != -1 );
-
- printf("fcntl F_SETFD should return 0\n");
- status = fcntl( fd, F_SETFD, 1 );
- assert( status == 0 );
-
- printf("fcntl F_SETFD should return 1\n");
- status = fcntl( fd, F_GETFD, 1 );
- assert( status == 1 );
-
-#if 0
- printf("fcntl F_DUPFD should return 0\n");
- status = fcntl( fd, F_DUPFD, 0 );
- assert ( status == 0 );
-#else
- printf("fcntl F_DUPFD should return 0 -- skip until implemented\n");
-#endif
-
- printf("fcntl F_GETFL returns current flags\n");
- status = fcntl( fd, F_GETFL, 1 );
- printf("fcntl F_GETFL returned 0x%x\n", status );
- assert( status != -1 );
-
- printf("fcntl F_SETFL to add O_APPEND and O_NONBLOCK\n");
- status = fcntl( fd, F_SETFL, O_APPEND|O_NONBLOCK );
- assert ( status != -1 );
-
- printf("fcntl F_GETFL return current flags to see changes\n");
- status = fcntl( fd, F_GETFL, 1 );
- printf("fcntl F_GETFL returned 0x%x\n", status );
- assert( status != -1 );
-
- printf("fcntl F_GETLK should return -1\n");
- status = fcntl( fd, F_GETLK, 1 );
- assert ( status == -1 );
-
- printf("fcntl F_SETLK should return -1\n");
- status = fcntl( fd, F_SETLK, 1 );
- assert ( status == -1 );
-
- printf("fcntl F_SETLKW should return -1\n");
- status = fcntl( fd, F_SETLKW, 1 );
- assert ( status == -1 );
-
- printf("fcntl F_SETOWN should return -1\n");
- status = fcntl( fd, F_SETOWN, 1 );
- assert ( status == -1 );
-
- printf("fcntl F_GETOWN should return -1\n");
- status = fcntl( fd, F_GETOWN, 1 );
- assert ( status == -1 );
-
- printf("fcntl invalid argument should return -1\n");
- status = fcntl( fd, 0xb, 1 );
- printf("Status %d\n",status);
- assert( status == -1 );
-
- printf("opendir and readdir /b/myfile\n");
- directory_not = opendir ("/b/my_file");
- d_not = readdir(directory_not);
-
- printf("opendir and readdir\n");
- directory_not = opendir ("/a");
- d_not = readdir (directory_not);
-
- printf("chdir to /b/myfile\n");
- status = chdir ("/b/my_file");
- assert (status == -1);
-
- printf( "\nPerforming stat of directory /\n");
- status = stat( "/", &s );
- printf("status for stat : %d, size of directory: %d\n\n",
- status,(int)s.st_size);
-
- puts( "\nOpen and print directory /" );
- directory = opendir("/");
- assert( directory );
- printdir(directory);
-
- printf("\nmkdir /d/my_dir\n");
- status = mkdir( "/d/my_dir", 0x1c0 );
- printf("Open /d/my_dir\n");
- directory_not = opendir( "/d/my_dir" );
- assert( directory_not );
-
- printf( "remove /d/my_dir.\n" );
- status = rmdir( "/d/my_dir" );
- assert( status == 0 );
-
- printf( "close /d/my_dir.\n" );
- closedir( directory_not );
-
- printf( "\nOpening directory /c\n" );
- directory2 = opendir("/c");
-
- assert( directory2 );
-
- printdir(directory2);
- status = closedir( directory2 );
-
- printf( "\nOpening directory /c/y\n" );
- directory3 = opendir("/c/y");
- assert( directory3 );
- printdir(directory3);
- status = closedir( directory3 );
-
- printf( "\nLSEEK to the start of the open directory\n" );
- lseek( directory->dd_fd, 0, SEEK_SET );
- printdir(directory);
-
- lseek( directory->dd_fd, 0, SEEK_CUR );
-
- lseek( directory->dd_fd, 0, SEEK_END );
-
- lseek( directory->dd_fd, 0, -99 );
-
- printf( "\nRewinding directory\n" );
- rewinddir( directory );
- printdir(directory);
-
-/* Don't know how to check this one automatically. */
- printf( "Send rewinddir a NULL pointer\n");
- rewinddir( NULL );
-
- printf( "\nSeek directory\n" );
- printf( "telldir() should report only sizeof(struct dirent) increments \n" );
- printf( "in position. Sizeof(struct dirent): %d\n", sizeof(struct dirent) );
- rewinddir( directory );
- for( off=0 ; off<=200 ; off=off + sizeof(struct dirent) / 4 ) {
- seekdir( directory, off );
- printf(
- "seeked to %2d -- currently at %2d\n",
- (int)off,
- (int)telldir(directory)
- );
- }
-
- printf( "Send seekdir a NULL pointer\n");
- seekdir( NULL, off );
-
- printf( "\nClosing directory\n" );
- status = closedir( directory );
-
- printf( "\nSCANDIR TEST\n");
- printf( "\nselection rule 1\n");
- printf( "scanning for any entry under directory /c\n\n");
- status = scandir(
- "/c",
- &namelist,
- select1,
- NULL
- );
- printf("\nscandir status: %d\n", status );
- for ( i=0; i<status; i++)
- {
- printf("Selected Node Name: %s\n", namelist[i]->d_name );
- }
-
- printf( "\nselection rule 2\n");
- printf( "scanning for any entry under directory /c whose name = y\n\n");
- status = scandir(
- "/c",
- &namelist,
- select2,
- NULL
- );
- printf("\nscandir status: %d\n", status );
- for ( i=0; i<status; i++)
- {
- printf("Selected Node Name: %s\n", namelist[i]->d_name );
- }
-
- printf( "\nSCANDIR with sorting\n" );
- printf( "\nselection rule 1\n");
- printf( "scanning for any entry under directory /c\n");
- printf( "sort in ascending order\n\n");
- status = scandir(
- "/c",
- &namelist,
- select1,
- compare_ascending
- );
- printf("\nscandir status: %d\n", status );
- for ( i=0; i<status; i++)
- {
- printf("Selected and Sorted Node Name: %s\n", namelist[i]->d_name );
- }
-
-
- printf( "\nSCANDIR with sorting\n" );
- printf( "\nselection rule 1\n");
- printf( "scanning for any entry under directory /c\n");
- printf( "sort in descending order\n\n");
- status = scandir(
- "/c",
- &namelist,
- select1,
- compare_descending
- );
- printf("scandir status: %d\n", status );
- for ( i=0; i<status; i++)
- {
- printf("Selected and Sorted Node Name: %s\n", namelist[i]->d_name );
- }
-
- test_across_mount();
- printf( "\n\n*** END OF READDIR TEST ***\n" );
- rtems_test_exit(0);
-}
-