X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=platform%2Fposix%2Ffunctions%2Fstdio%2Fremove.c;fp=platform%2Fposix%2Ffunctions%2Fstdio%2Fremove.c;h=389df301be224d6945d6b8a250f7e31a82ca7543;hb=a18343e497615802f47e0f6876b5bed73af674e0;hp=0000000000000000000000000000000000000000;hpb=b76c255d42904c10ce65f884429b4bf2f9b4f4a4;p=pdclib diff --git a/platform/posix/functions/stdio/remove.c b/platform/posix/functions/stdio/remove.c new file mode 100644 index 0000000..389df30 --- /dev/null +++ b/platform/posix/functions/stdio/remove.c @@ -0,0 +1,77 @@ +/* $Id$ */ + +/* remove( const char * ) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +/* This is an example implementation of remove() fit for use with POSIX kernels. +*/ + +#include + +#ifndef REGTEST + +#include + +#include "/usr/include/errno.h" + +extern struct _PDCLIB_file_t * _PDCLIB_filelist; + +extern int unlink( const char * pathname ); + +int remove( const char * pathname ) +{ + int rc; + struct _PDCLIB_file_t * current = _PDCLIB_filelist; + while ( current != NULL ) + { + if ( ( current->filename != NULL ) && ( strcmp( current->filename, pathname ) == 0 ) ) + { + return EOF; + } + current = current->next; + } + if ( ( rc = unlink( pathname ) ) == -1 ) + { + switch ( errno ) + { + /* See the comments on implementation-defined errno values in + <_PDCLIB_config.h>. + */ + case EACCES: + case EFAULT: + case EIO: + case EISDIR: + case ELOOP: + case ENAMETOOLONG: + case ENOENT: + case ENOMEM: + case ENOTDIR: + case EPERM: + case EROFS: + _PDCLIB_errno = _PDCLIB_ERROR; + break; + default: + /* This should be something like EUNKNOWN. */ + _PDCLIB_errno = _PDCLIB_ERROR; + break; + } + } + return rc; +} + +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +int main( void ) +{ + /* Testing covered by ftell.c (and several others) */ + return TEST_RESULTS; +} + +#endif +