Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The rename() function has the following prototype.:

Code Block
int rename(char const *old_file, char const *new_file);

...

This code example is non-compliant because if new_file exists it will be is removed by rename().

Code Block
bgColor#ffcccc
char const *old_file = /* ... */;
char const *new_file = /* ... */;
if (rename(old_file, new_file) != 0) {
  /* Handle Error */
}

...

Code Block
bgColor#ccccff
char const *old_file = /* ... */;
char const *new_file = /* ... */;

(void) remove(new_file);

if (rename(old_file, new_file) != 0) {
  /* Handle error condition */
}

This code contains an unavoidable race condition between the call to remove() and the call to rename() and consequently can consequently only be safely executed within a secure directory (see FIO17-A. Ensure that file operations are performed in a secure directory).

...

The file_exists() function is provided by the application, and is not shown here as it needs to must be implemented differently on different platforms. (On POSIX systems it would use access(), on Windows _access_s(), and on other platforms whatever function is available to test file existence.)

...