mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
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:
parent
b7544cb016
commit
fcbbdd850f
@ -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;
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Reference in New Issue
Block a user