X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Frename.c;h=2a34fe698f6704f1e9c626cf16bb9161fdc97e0f;hb=b189506b1b895940933bdfc5d6d6ae5d0ba65721;hp=f3ff01ee604a44ba46fc65c4802d8c17ef22ba9a;hpb=f0ac10970fd7b6bca57495e1aa41517c1e673110;p=pdclib diff --git a/functions/stdio/rename.c b/functions/stdio/rename.c index f3ff01e..2a34fe6 100644 --- a/functions/stdio/rename.c +++ b/functions/stdio/rename.c @@ -11,27 +11,40 @@ #ifndef REGTEST #include <_PDCLIB_glue.h> +#include + +extern struct _PDCLIB_file_t * _PDCLIB_filelist; + int rename( const char * old, const char * new ) { - /* TODO: Search open file list, flush and close file */ + struct _PDCLIB_file_t * current = _PDCLIB_filelist; + while ( current != NULL ) + { + if ( ( current->filename != NULL ) && ( strcmp( current->filename, old ) == 0 ) ) + { + /* File of that name currently open. Do not rename. */ + return EOF; + } + current = current->next; + } return _PDCLIB_rename( old, new ); } #endif #ifdef TEST -/* TODO: Work around the following undef */ -#undef SEEK_SET #include <_PDCLIB_test.h> #include int main( void ) { - /* TODO: Extend to internal testing (buffer etc.) */ char filename1[] = "touch testfile1"; char filename2[] = "testfile2"; - /* check that neither file exists */ + FILE * file; + remove( filename1 + 6 ); + remove( filename2 ); + /* make sure that neither file exists */ TESTCASE( fopen( filename1 + 6, "r" ) == NULL ); TESTCASE( fopen( filename2, "r" ) == NULL ); /* rename file 1 to file 2 - expected to fail */ @@ -39,16 +52,19 @@ int main( void ) /* create file 1 */ system( filename1 ); /* check that file 1 exists */ - TESTCASE( fopen( filename1 + 6, "r" ) != NULL ); + TESTCASE( ( file = fopen( filename1 + 6, "r" ) ) != NULL ); + TESTCASE( fclose( file ) == 0 ); /* rename file 1 to file 2 */ TESTCASE( rename( filename1 + 6, filename2 ) == 0 ); /* check that file 2 exists, file 1 does not */ TESTCASE( fopen( filename1 + 6, "r" ) == NULL ); - TESTCASE( fopen( filename2, "r" ) != NULL ); + TESTCASE( ( file = fopen( filename2, "r" ) ) != NULL ); + TESTCASE( fclose( file ) == 0 ); /* create another file 1 */ system( filename1 ); /* check that file 1 exists */ - TESTCASE( fopen( filename1 + 6, "r" ) != NULL ); + TESTCASE( ( file = fopen( filename1 + 6, "r" ) ) != NULL ); + TESTCASE( fclose( file ) == 0 ); /* rename file 1 to file 2 - expected to fail, see comment in _PDCLIB_rename() itself. */ @@ -68,3 +84,4 @@ int main( void ) } #endif +