Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Unified Diff: util/file/file_io.h

Issue 818433002: Add LoggingOpenFileFor{Read|Write} (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@scoped-handle-land
Patch Set: . Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | util/file/file_io_posix.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/file/file_io.h
diff --git a/util/file/file_io.h b/util/file/file_io.h
index 927bc3cb13319ff5843a613cff77bbfd20588648..5e00601ac175c13333ef50cf4fd66616fbbb9011 100644
--- a/util/file/file_io.h
+++ b/util/file/file_io.h
@@ -23,16 +23,34 @@
#include <windows.h>
#endif
+namespace base {
+class FilePath;
+} // namespace base
+
namespace crashpad {
-#if defined(OS_POSIX)
+#if defined(OS_POSIX) || DOXYGEN
+//! \brief Platform-specific alias for a low-level file handle.
using FileHandle = int;
#elif defined(OS_WIN)
using FileHandle = HANDLE;
#endif
+//! \brief Determines the mode that LoggingOpenFileForWrite() uses.
+enum class FileWriteMode {
+ //! \brief Opens the file if it exists, or creates a new file.
+ kReuseOrCreate,
+
+ //! \brief Creates a new file. If the file already exists, it will be
+ //! overwritten.
+ kTruncateOrCreate,
+
+ //! \brief Creates a new file. If the file already exists, the open will fail.
+ kCreateOrFail,
+};
+
//! \brief Reads from a file, retrying when interrupted on POSIX or following a
-//! short read.
+//! short read.
//!
//! This function reads into \a buffer, stopping only when \a size bytes have
//! been read or when end-of-file has been reached. On Windows, reading from
@@ -49,7 +67,7 @@ using FileHandle = HANDLE;
ssize_t ReadFile(FileHandle file, void* buffer, size_t size);
//! \brief Writes to a file, retrying when interrupted or following a short
-//! write on POSIX.
+//! write on POSIX.
//!
//! This function writes to \a file, stopping only when \a size bytes have been
//! written.
@@ -121,8 +139,35 @@ void CheckedWriteFile(FileHandle file, const void* buffer, size_t size);
//! \sa ReadFile
void CheckedReadFileAtEOF(FileHandle file);
+//! \brief Wraps `open()` or `CreateFile()`, opening an existing file for
+//! reading. Logs an error if the operation fails.
+//!
+//! \return The newly opened FileHandle, or an invalid FileHandle on failure.
+//!
+//! \sa ScopedFD
+//! \sa ScopedFileHANDLE
+FileHandle LoggingOpenFileForRead(const base::FilePath& path);
+
+//! \brief Wraps `open()` or `CreateFile()`, creating a file for output. Logs
+//! an error if the operation fails.
+//!
+//! \a write_mode determines the style (truncate, reuse, etc.) that is used to
+//! open the file. On POSIX, if \a world_readable, `0644` will be used as
+//! `mode` permissions bits for `open()`, otherwise `0600` will be used. On
+//! Windows, the file is always opened in binary mode (that is, no CRLF
+//! translation).
+//!
+//! \return The newly opened FileHandle, or an invalid FileHandle on failure.
+//!
+//! \sa FileWriteMode
+//! \sa ScopedFD
+//! \sa ScopedFileHANDLE
+FileHandle LoggingOpenFileForWrite(const base::FilePath& path,
+ FileWriteMode write_mode,
+ bool world_readable);
+
//! \brief Wraps `close()` or `CloseHandle()`, logging an error if the operation
-//! fails.
+//! fails.
//!
//! \return On success, `true` is returned. On failure, an error is logged and
//! `false` is returned.
« no previous file with comments | « no previous file | util/file/file_io_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698