X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=platform%2Fexample%2Ffunctions%2F_PDCLIB%2Fopen.c;h=79497266350fb49992c533adb00bd546fe2b8e5e;hp=fc82485aec2d730b3505ee6e3e655e1c83faa11b;hb=393020b6e48719d27699dea6b29e53025bbd5123;hpb=f408c1fd633015089d2a0fc6bc31c9f61eeae0a9 diff --git a/platform/example/functions/_PDCLIB/open.c b/platform/example/functions/_PDCLIB/open.c index fc82485..7949726 100644 --- a/platform/example/functions/_PDCLIB/open.c +++ b/platform/example/functions/_PDCLIB/open.c @@ -20,6 +20,8 @@ #include #include +#include "/usr/include/errno.h" + int _PDCLIB_open( char const * const filename, unsigned int mode ) { /* This is an example implementation of _PDCLIB_open() fit for use with @@ -51,14 +53,41 @@ int _PDCLIB_open( char const * const filename, unsigned int mode ) default: /* Invalid mode */ return -1; } + int rc; if ( osmode & O_CREAT ) { - return open( filename, osmode, S_IRUSR | S_IWUSR ); + rc = open( filename, osmode, S_IRUSR | S_IWUSR ); } else { - return open( filename, osmode ); + rc = open( filename, osmode ); + } + if ( rc == -1 ) + { + switch ( errno ) + { + case EACCES: + case EFAULT: + case EINTR: + case EISDIR: + case ELOOP: + case EMFILE: + case ENAMETOOLONG: + case ENFILE: + case ENODEV: + case ENOENT: + case ENOMEM: + case ENOSPC: + case ENOTDIR: + case EOVERFLOW: + case EROFS: + case ETXTBSY: + _PDCLIB_errno = _PDCLIB_EIO; + default: + _PDCLIB_errno = _PDCLIB_EUNKNOWN; + } } + return rc; } #endif @@ -69,8 +98,6 @@ int _PDCLIB_open( char const * const filename, unsigned int mode ) #include #include -#include - int main( void ) { /* This testdriver assumes POSIX, i.e. _PDCLIB_fd_t being int and being @@ -78,6 +105,7 @@ int main( void ) */ int fh; char buffer[ 10 ]; + remove( "testfile" ); /* Trying to read non-existent file. */ TESTCASE( _PDCLIB_open( "testfile", _PDCLIB_FREAD ) == _PDCLIB_NOHANDLE ); /* Writing to file, trying to read from it. */ @@ -126,7 +154,7 @@ int main( void ) TESTCASE( memcmp( buffer, "tessiebaby", 10 ) == 0 ); TESTCASE( _PDCLIB_close( fh ) == 0 ); /* Cleaning up. */ - system( "rm testfile" ); + TESTCASE( remove( "testfile" ) == 0 ); return TEST_RESULTS; }