3 /* _PDCLIB_rename( const char *, const char * )
5 This file is part of the Public Domain C Library (PDCLib).
6 Permission is granted to use, modify, and / or redistribute at will.
12 #include <_PDCLIB_glue.h>
14 #include </usr/include/errno.h>
16 extern int unlink( const char * pathname );
17 extern int link( const char * old, const char * new );
19 int _PDCLIB_rename( const char * old, const char * new )
21 /* Note that the behaviour if new file exists is implementation-defined.
22 There is nothing wrong with either overwriting it or failing the
23 operation, but you might want to document whichever you chose.
24 This example fails if new file exists.
26 if ( link( old, new ) == 0 )
28 if ( unlink( old ) == EOF )
43 _PDCLIB_errno = _PDCLIB_EIO;
46 _PDCLIB_errno = _PDCLIB_EUNKNOWN;
74 _PDCLIB_errno = _PDCLIB_EIO;
77 _PDCLIB_errno = _PDCLIB_EUNKNOWN;
87 #include <_PDCLIB_test.h>
96 /* check that neither file exists */
97 TESTCASE( fopen( testfile1, "r" ) == NULL );
98 TESTCASE( fopen( testfile2, "r" ) == NULL );
99 /* rename file 1 to file 2 - expected to fail */
100 TESTCASE( _PDCLIB_rename( testfile1, testfile2 ) == -1 );
102 TESTCASE( ( file = fopen( testfile1, "w" ) ) != NULL );
103 TESTCASE( fputc( 'x', file ) == 'x' );
104 TESTCASE( fclose( file ) == 0 );
105 /* check that file 1 exists */
106 TESTCASE( ( file = fopen( testfile1, "r" ) ) != NULL );
107 TESTCASE( fclose( file ) == 0 );
108 /* rename file 1 to file 2 */
109 TESTCASE( _PDCLIB_rename( testfile1, testfile2 ) == 0 );
110 /* check that file 2 exists, file 1 does not */
111 TESTCASE( fopen( testfile1, "r" ) == NULL );
112 TESTCASE( ( file = fopen( testfile2, "r" ) ) != NULL );
113 TESTCASE( fclose( file ) == 0 );
114 /* create another file 1 */
115 TESTCASE( ( file = fopen( testfile1, "w" ) ) != NULL );
116 TESTCASE( fputc( 'x', file ) == 'x' );
117 TESTCASE( fclose( file ) == 0 );
118 /* check that file 1 exists */
119 TESTCASE( ( file = fopen( testfile1, "r" ) ) != NULL );
120 TESTCASE( fclose( file ) == 0 );
121 /* rename file 1 to file 2 - expected to fail, see comment in
122 _PDCLIB_rename() itself.
124 TESTCASE( _PDCLIB_rename( testfile1, testfile2 ) == -1 );
125 /* remove both files */