Index: util/file/file_io_posix.cc |
diff --git a/util/file/file_io_posix.cc b/util/file/file_io_posix.cc |
index ff32009021679f3690e9a7eb65c402dfc2e5f6d1..8681ad8dade067b8cbdd23cc1311730d167f04e0 100644 |
--- a/util/file/file_io_posix.cc |
+++ b/util/file/file_io_posix.cc |
@@ -14,8 +14,10 @@ |
#include "util/file/file_io.h" |
+#include <fcntl.h> |
#include <unistd.h> |
+#include "base/files/file_path.h" |
#include "base/logging.h" |
#include "base/numerics/safe_conversions.h" |
#include "base/posix/eintr_wrapper.h" |
@@ -74,6 +76,28 @@ ssize_t WriteFile(FileHandle file, const void* buffer, size_t size) { |
return ReadOrWrite<WriteTraits>(file, buffer, size); |
} |
+FileHandle LoggingOpenFileForRead(const base::FilePath& path) { |
+ int fd = HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)); |
+ PLOG_IF(ERROR, fd < 0) << "open " << path.value(); |
+ return fd; |
+} |
+ |
+FileHandle LoggingOpenFileForWrite(const base::FilePath& path, |
+ FileWriteMode mode, |
+ bool world_readable) { |
+ int flags = O_WRONLY | O_CREAT; |
+ // kReuseOrCreate does not need any additional flags. |
+ if (mode == FileWriteMode::kTruncateOrCreate) |
+ flags |= O_TRUNC; |
+ else if (mode == FileWriteMode::kCreateOrFail) |
+ flags |= O_EXCL; |
+ |
+ int fd = HANDLE_EINTR( |
+ open(path.value().c_str(), flags, world_readable ? 0644 : 0600)); |
+ PLOG_IF(ERROR, fd < 0) << "open " << path.value(); |
+ return fd; |
+} |
+ |
bool LoggingCloseFile(FileHandle file) { |
int rv = IGNORE_EINTR(close(file)); |
PLOG_IF(ERROR, rv != 0) << "close"; |