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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « no previous file | util/file/file_io_posix.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and 12 // See the License for the specific language governing permissions and
13 // limitations under the License. 13 // limitations under the License.
14 14
15 #ifndef CRASHPAD_UTIL_FILE_FILE_IO_H_ 15 #ifndef CRASHPAD_UTIL_FILE_FILE_IO_H_
16 #define CRASHPAD_UTIL_FILE_FILE_IO_H_ 16 #define CRASHPAD_UTIL_FILE_FILE_IO_H_
17 17
18 #include <sys/types.h> 18 #include <sys/types.h>
19 19
20 #include "build/build_config.h" 20 #include "build/build_config.h"
21 21
22 #if defined(OS_WIN) 22 #if defined(OS_WIN)
23 #include <windows.h> 23 #include <windows.h>
24 #endif 24 #endif
25 25
26 namespace base {
27 class FilePath;
28 } // namespace base
29
26 namespace crashpad { 30 namespace crashpad {
27 31
28 #if defined(OS_POSIX) 32 #if defined(OS_POSIX) || DOXYGEN
33 //! \brief Platform-specific alias for a low-level file handle.
29 using FileHandle = int; 34 using FileHandle = int;
30 #elif defined(OS_WIN) 35 #elif defined(OS_WIN)
31 using FileHandle = HANDLE; 36 using FileHandle = HANDLE;
32 #endif 37 #endif
33 38
39 //! \brief Determines the mode that LoggingOpenFileForWrite() uses.
40 enum class FileWriteMode {
41 //! \brief Opens the file if it exists, or creates a new file.
42 kReuseOrCreate,
43
44 //! \brief Creates a new file. If the file already exists, it will be
45 //! overwritten.
46 kTruncateOrCreate,
47
48 //! \brief Creates a new file. If the file already exists, the open will fail.
49 kCreateOrFail,
50 };
51
34 //! \brief Reads from a file, retrying when interrupted on POSIX or following a 52 //! \brief Reads from a file, retrying when interrupted on POSIX or following a
35 //! short read. 53 //! short read.
36 //! 54 //!
37 //! This function reads into \a buffer, stopping only when \a size bytes have 55 //! This function reads into \a buffer, stopping only when \a size bytes have
38 //! been read or when end-of-file has been reached. On Windows, reading from 56 //! been read or when end-of-file has been reached. On Windows, reading from
39 //! sockets is not currently supported. 57 //! sockets is not currently supported.
40 //! 58 //!
41 //! \return The number of bytes read and placed into \a buffer, or `-1` on 59 //! \return The number of bytes read and placed into \a buffer, or `-1` on
42 //! error, with `errno` or `GetLastError()` set appropriately. On error, a 60 //! error, with `errno` or `GetLastError()` set appropriately. On error, a
43 //! portion of \a file may have been read into \a buffer. 61 //! portion of \a file may have been read into \a buffer.
44 //! 62 //!
45 //! \sa WriteFile 63 //! \sa WriteFile
46 //! \sa LoggingReadFile 64 //! \sa LoggingReadFile
47 //! \sa CheckedReadFile 65 //! \sa CheckedReadFile
48 //! \sa CheckedReadFileAtEOF 66 //! \sa CheckedReadFileAtEOF
49 ssize_t ReadFile(FileHandle file, void* buffer, size_t size); 67 ssize_t ReadFile(FileHandle file, void* buffer, size_t size);
50 68
51 //! \brief Writes to a file, retrying when interrupted or following a short 69 //! \brief Writes to a file, retrying when interrupted or following a short
52 //! write on POSIX. 70 //! write on POSIX.
53 //! 71 //!
54 //! This function writes to \a file, stopping only when \a size bytes have been 72 //! This function writes to \a file, stopping only when \a size bytes have been
55 //! written. 73 //! written.
56 //! 74 //!
57 //! \return The number of bytes written from \a buffer, or `-1` on error, with 75 //! \return The number of bytes written from \a buffer, or `-1` on error, with
58 //! `errno` or `GetLastError()` set appropriately. On error, a portion of 76 //! `errno` or `GetLastError()` set appropriately. On error, a portion of
59 //! \a buffer may have been written to \a file. 77 //! \a buffer may have been written to \a file.
60 //! 78 //!
61 //! \sa ReadFile 79 //! \sa ReadFile
62 //! \sa LoggingWriteFile 80 //! \sa LoggingWriteFile
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 //! \brief Wraps ReadFile(), ensuring that it indicates end-of-file. 132 //! \brief Wraps ReadFile(), ensuring that it indicates end-of-file.
115 //! 133 //!
116 //! Attempts to read a single byte from \a file, expecting no data to be read. 134 //! Attempts to read a single byte from \a file, expecting no data to be read.
117 //! If the underlying ReadFile() fails, or if a byte actually is read, this 135 //! If the underlying ReadFile() fails, or if a byte actually is read, this
118 //! function causes execution to terminate without returning. 136 //! function causes execution to terminate without returning.
119 //! 137 //!
120 //! \sa CheckedReadFile 138 //! \sa CheckedReadFile
121 //! \sa ReadFile 139 //! \sa ReadFile
122 void CheckedReadFileAtEOF(FileHandle file); 140 void CheckedReadFileAtEOF(FileHandle file);
123 141
142 //! \brief Wraps `open()` or `CreateFile()`, opening an existing file for
143 //! reading. Logs an error if the operation fails.
144 //!
145 //! \return The newly opened FileHandle, or an invalid FileHandle on failure.
146 //!
147 //! \sa ScopedFD
148 //! \sa ScopedFileHANDLE
149 FileHandle LoggingOpenFileForRead(const base::FilePath& path);
150
151 //! \brief Wraps `open()` or `CreateFile()`, creating a file for output. Logs
152 //! an error if the operation fails.
153 //!
154 //! \a write_mode determines the style (truncate, reuse, etc.) that is used to
155 //! open the file. On POSIX, if \a world_readable, `0644` will be used as
156 //! `mode` permissions bits for `open()`, otherwise `0600` will be used. On
157 //! Windows, the file is always opened in binary mode (that is, no CRLF
158 //! translation).
159 //!
160 //! \return The newly opened FileHandle, or an invalid FileHandle on failure.
161 //!
162 //! \sa FileWriteMode
163 //! \sa ScopedFD
164 //! \sa ScopedFileHANDLE
165 FileHandle LoggingOpenFileForWrite(const base::FilePath& path,
166 FileWriteMode write_mode,
167 bool world_readable);
168
124 //! \brief Wraps `close()` or `CloseHandle()`, logging an error if the operation 169 //! \brief Wraps `close()` or `CloseHandle()`, logging an error if the operation
125 //! fails. 170 //! fails.
126 //! 171 //!
127 //! \return On success, `true` is returned. On failure, an error is logged and 172 //! \return On success, `true` is returned. On failure, an error is logged and
128 //! `false` is returned. 173 //! `false` is returned.
129 bool LoggingCloseFile(FileHandle file); 174 bool LoggingCloseFile(FileHandle file);
130 175
131 //! \brief Wraps `close()` or `CloseHandle()`, ensuring that it succeeds. 176 //! \brief Wraps `close()` or `CloseHandle()`, ensuring that it succeeds.
132 //! 177 //!
133 //! If the underlying function fails, this function causes execution to 178 //! If the underlying function fails, this function causes execution to
134 //! terminate without returning. 179 //! terminate without returning.
135 void CheckedCloseFile(FileHandle file); 180 void CheckedCloseFile(FileHandle file);
136 181
137 } // namespace crashpad 182 } // namespace crashpad
138 183
139 #endif // CRASHPAD_UTIL_FILE_FILE_IO_H_ 184 #endif // CRASHPAD_UTIL_FILE_FILE_IO_H_
OLDNEW
« 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