X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Frename.c;h=f3ff01ee604a44ba46fc65c4802d8c17ef22ba9a;hb=f0ac10970fd7b6bca57495e1aa41517c1e673110;hp=5cb5665f940bf79913bbab0cf2fe34b7c7cf805b;hpb=34893ecc2200dc7017c36a54cb6c5f4c2378b5ec;p=pdclib diff --git a/functions/stdio/rename.c b/functions/stdio/rename.c index 5cb5665..f3ff01e 100644 --- a/functions/stdio/rename.c +++ b/functions/stdio/rename.c @@ -1,8 +1,70 @@ -// ---------------------------------------------------------------------------- -// $Id$ -// ---------------------------------------------------------------------------- -// Public Domain C Library - http://pdclib.sourceforge.net -// This code is Public Domain. Use, modify, and redistribute at will. -// ---------------------------------------------------------------------------- - -int rename( const char * old, const char * new ) { /* TODO */ }; +/* $Id$ */ + +/* rename( const char *, const char * ) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#include + +#ifndef REGTEST +#include <_PDCLIB_glue.h> + +int rename( const char * old, const char * new ) +{ + /* TODO: Search open file list, flush and close file */ + 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 */ + TESTCASE( fopen( filename1 + 6, "r" ) == NULL ); + TESTCASE( fopen( filename2, "r" ) == NULL ); + /* rename file 1 to file 2 - expected to fail */ + TESTCASE( rename( filename1 + 6, filename2 ) == -1 ); + /* create file 1 */ + system( filename1 ); + /* check that file 1 exists */ + TESTCASE( fopen( filename1 + 6, "r" ) != NULL ); + /* 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 ); + /* create another file 1 */ + system( filename1 ); + /* check that file 1 exists */ + TESTCASE( fopen( filename1 + 6, "r" ) != NULL ); + /* rename file 1 to file 2 - expected to fail, see comment in + _PDCLIB_rename() itself. + */ +#ifndef REGTEST + TESTCASE( rename( filename1 + 6, filename2 ) == -1 ); +#else + /* glibc rename() overwrites existing destination file. */ + TESTCASE( rename( filename1 + 6, filename2 ) == 0 ); +#endif + /* remove both files */ + remove( filename1 + 6 ); + remove( filename2 ); + /* check that they're gone */ + TESTCASE( fopen( filename1 + 6, "r" ) == NULL ); + TESTCASE( fopen( filename2, "r" ) == NULL ); + return TEST_RESULTS; +} + +#endif