From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- private/posix/client/tst/tstdir.c | 308 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 private/posix/client/tst/tstdir.c (limited to 'private/posix/client/tst/tstdir.c') diff --git a/private/posix/client/tst/tstdir.c b/private/posix/client/tst/tstdir.c new file mode 100644 index 000000000..cac768cd5 --- /dev/null +++ b/private/posix/client/tst/tstdir.c @@ -0,0 +1,308 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tsttmp.h" // defines DbgPrint as printf + +extern int errno; +VOID dir0(char *); +VOID dir1(char *); +VOID dir2(char *); +VOID dir3(char *); +VOID dir4(char *); +VOID dir5(char *); + + +int +main(int argc, char *argv[]) +{ + + DbgPrint("argc = %d, argv[1] = %s\n", argc, argv[1]); + + if (argc != 2) { + DbgPrint("Usage: 'tstdir basedirectory' (basedirectory is usually /psx/test)\n"); + return 1; + } + + dir0(argv[1]); + dir1(argv[1]); + dir2(argv[1]); + dir3(argv[1]); + dir4(argv[1]); + dir5(argv[1]); + + return 1; +} + + +VOID +dir0(char *f) +{ + int rc; + DIR *dir; + struct dirent *dirent; + + DbgPrint("dir0:++ %s\n",f); + + dir = opendir(f); + ASSERT(dir != NULL); + + errno = 0; + dirent = readdir(dir); + while( dirent ) { + DbgPrint("%s\n",&dirent->d_name); + dirent = readdir(dir); + } + ASSERT(errno == 0); + + rc = closedir(dir); + ASSERT(rc==0); + + rc = closedir(dir); + ASSERT(rc==-1 && errno == EBADF); + + DbgPrint("dir0:--\n"); +} + +VOID +dir1(char *f) +{ + int rc,i; + DIR *dir; + + char buf1[256],buf2[256]; + struct dirent *dirent; + + DbgPrint("dir1:++ %s\n",f); + + dir = opendir(f); + ASSERT(dir != NULL); + + // + // Get Two Directory entries. + // + i = 0; + errno = 0; + dirent = readdir(dir); + if ( dirent ) { + strcpy(buf1,(char *)&dirent->d_name); + i++; + } + dirent = readdir(dir); + if ( dirent ) { + strcat(buf1,(char *)&dirent->d_name); + i++; + } + + // + // Go past a few entries + // + + dirent = readdir(dir); + if ( dirent ) { + dirent = readdir(dir); + } + + // + // Rewind the directory stream and then read into a new buffer + // and compare results + // + + rewinddir(dir); + + buf2[0]='\0'; + while(i--) { + dirent = readdir(dir); + ASSERT(dirent); + strcat(buf2,(char *)&dirent->d_name); + } + ASSERT(strcmp(buf1,buf2) == 0); + + rc = closedir(dir); + ASSERT(rc==0); + + rc = closedir(dir); + ASSERT(rc==-1 && errno == EBADF); + + DbgPrint("dir1:--\n"); +} + +VOID +dir2(char *f) +{ + int rc; + char buf[256], *b; + + + DbgPrint("dir2:++ %s\n",f); + + rc = chdir(f); + ASSERT(rc==0); + + b = getcwd(buf,256); + ASSERT(b); + + b = getcwd(buf,-1); + ASSERT(b==NULL && errno == EINVAL); + + b = getcwd(buf,1); + ASSERT(b==NULL && errno == ERANGE); + + rc = chdir("/psx/test/tstdirs"); + ASSERT(rc==0); + + b = getcwd(buf,256); + ASSERT(b); + + b = getcwd(buf,-1); + ASSERT(b==NULL && errno == EINVAL); + + b = getcwd(buf,1); + ASSERT(b==NULL && errno == ERANGE); + + DbgPrint("dir2:--\n"); +} + +VOID +dir3(char *f) +{ + int rc; + DIR *dir; + struct dirent *dirent; + + DbgPrint("dir3:++ %s\n",f); + + rc = chdir(f); + ASSERT(rc==0); + + dir = opendir("."); + ASSERT(dir != NULL); + + errno = 0; + dirent = readdir(dir); + while( dirent ) { + DbgPrint("%s\n",&dirent->d_name); + dirent = readdir(dir); + } + ASSERT(errno == 0); + + rc = closedir(dir); + ASSERT(rc==0); + + rc = chdir("/psx/test/tstdirs"); + ASSERT(rc==0); + + dir = opendir("."); + ASSERT(dir != NULL); + + errno = 0; + dirent = readdir(dir); + while( dirent ) { + DbgPrint("%s\n",&dirent->d_name); + dirent = readdir(dir); + } + ASSERT(errno == 0); + + rc = closedir(dir); + ASSERT(rc==0); + + + DbgPrint("dir3:--\n"); +} + + +VOID +dir4(char *f) +{ + int rc; + DIR *dir; + struct dirent *dirent; + + DbgPrint("dir4:++ %s\n",f); + + dir = opendir(f); + ASSERT(dir != NULL); + + if ( fork() == 0 ) { + sleep(10); + errno = 0; + dirent = readdir(dir); + while( dirent ) { + DbgPrint("%s\n",&dirent->d_name); + dirent = readdir(dir); + } + ASSERT(errno == 0); + + rc = closedir(dir); + ASSERT(rc==0); + + rc = closedir(dir); + ASSERT(rc==-1 && errno == EBADF); + + _exit(0); + } + + rc = closedir(dir); + ASSERT(rc==0); + + rc = closedir(dir); + ASSERT(rc==-1 && errno == EBADF); + + wait(NULL); + + DbgPrint("dir4:--\n"); +} + +VOID +dir5(char *f) +{ + int rc; + char buf[256], *b; + PCH Arg[3], Env[4]; + + + DbgPrint("dir5:++ %s\n",f); + + rc = chdir(f); + ASSERT(rc==0); + + b = getcwd(buf,256); + ASSERT(b); + + b = getcwd(buf,-1); + ASSERT(b==NULL && errno == EINVAL); + + b = getcwd(buf,1); + ASSERT(b==NULL && errno == ERANGE); + + rc = chdir("/psx/test/tstdirs"); + ASSERT(rc==0); + + b = getcwd(buf,256); + ASSERT(b); + + b = getcwd(buf,-1); + ASSERT(b==NULL && errno == EINVAL); + + b = getcwd(buf,1); + ASSERT(b==NULL && errno == ERANGE); + + Arg[0]="tsthello.xxx"; + Arg[1]=(PCH)NULL; + Env[0]="NTUSER=ELLENA"; + Env[1]=(PCH)NULL; + + execve("\\DosDevices\\D:\\PSX\\TSTHELLO.exe",Arg,Env); + + ASSERT(FALSE); + + DbgPrint("dir5:--\n"); +} -- cgit v1.2.3