Adding from RELENG_1_2: safe_write_file() Writes a file out atomically by first writing to a temporary file of the same name but ending with the pid of the current process, them renaming the temporary file over the original.

This commit is contained in:
Scott Ullrich 2010-02-14 14:53:43 -05:00
parent b7544cb016
commit fcbbdd850f

View File

@ -1713,4 +1713,43 @@ function update_alias_names_upon_change($section, $subsection, $fielda, $fieldb,
}
?>
/****f* pfsense-utils/safe_write_file
* NAME
* safe_write_file - Write a file out atomically
* DESCRIPTION
* safe_write_file() Writes a file out atomically by first writing to a
* temporary file of the same name but ending with the pid of the current
* process, them renaming the temporary file over the original.
* INPUTS
* $filename - string containing the filename of the file to write
* $content - string containing the file content to write to file
* $force_binary - boolean denoting whether we should force binary
* mode writing.
* RESULT
* boolean - true if successful, false if not
******/
function safe_write_file($file, $content, $force_binary) {
$tmp_file = $file . "." . getmypid();
$write_mode = $force_binary ? "wb" : "w";
$fd = fopen($tmp_file, $write_mode);
if (!$fd) {
// Unable to open temporary file for writing
return false;
}
if (!fwrite($fd, $content)) {
// Unable to write to temporary file
fclose($fd);
return false;
}
fclose($fd);
if (!rename($tmp_file, $file)) {
// Unable to move temporary file to original
unlink($tmp_file);
return false;
}
return true;
}
?>