Index: util/file/file_io.cc |
diff --git a/util/file/fd_io.cc b/util/file/file_io.cc |
similarity index 40% |
copy from util/file/fd_io.cc |
copy to util/file/file_io.cc |
index cc97400ba34ba3e827a71f9c9dc1955ad18e1e8d..6f2d0b58811e4850ca8a4fc4c10f285a0807d091 100644 |
--- a/util/file/fd_io.cc |
+++ b/util/file/file_io.cc |
@@ -12,71 +12,16 @@ |
// See the License for the specific language governing permissions and |
// limitations under the License. |
-#include "util/file/fd_io.h" |
- |
-#include <unistd.h> |
+#include "util/file/file_io.h" |
#include "base/logging.h" |
#include "base/numerics/safe_conversions.h" |
-#include "base/posix/eintr_wrapper.h" |
- |
-namespace { |
- |
-struct ReadTraits { |
- using VoidBufferType = void*; |
- using CharBufferType = char*; |
- static ssize_t Operate(int fd, CharBufferType buffer, size_t size) { |
- return read(fd, buffer, size); |
- } |
-}; |
- |
-struct WriteTraits { |
- using VoidBufferType = const void*; |
- using CharBufferType = const char*; |
- static ssize_t Operate(int fd, CharBufferType buffer, size_t size) { |
- return write(fd, buffer, size); |
- } |
-}; |
- |
-template <typename Traits> |
-ssize_t ReadOrWrite(int fd, |
- typename Traits::VoidBufferType buffer, |
- size_t size) { |
- typename Traits::CharBufferType buffer_c = |
- reinterpret_cast<typename Traits::CharBufferType>(buffer); |
- |
- ssize_t total_bytes = 0; |
- while (size > 0) { |
- ssize_t bytes = HANDLE_EINTR(Traits::Operate(fd, buffer_c, size)); |
- if (bytes < 0) { |
- return bytes; |
- } else if (bytes == 0) { |
- break; |
- } |
- |
- buffer_c += bytes; |
- size -= bytes; |
- total_bytes += bytes; |
- } |
- |
- return total_bytes; |
-} |
- |
-} // namespace |
namespace crashpad { |
-ssize_t ReadFD(int fd, void* buffer, size_t size) { |
- return ReadOrWrite<ReadTraits>(fd, buffer, size); |
-} |
- |
-ssize_t WriteFD(int fd, const void* buffer, size_t size) { |
- return ReadOrWrite<WriteTraits>(fd, buffer, size); |
-} |
- |
-bool LoggingReadFD(int fd, void* buffer, size_t size) { |
+bool LoggingReadFile(FileHandle file, void* buffer, size_t size) { |
ssize_t expect = base::checked_cast<ssize_t>(size); |
- ssize_t rv = ReadFD(fd, buffer, size); |
+ ssize_t rv = ReadFile(file, buffer, size); |
if (rv < 0) { |
PLOG(ERROR) << "read"; |
return false; |
@@ -89,9 +34,9 @@ bool LoggingReadFD(int fd, void* buffer, size_t size) { |
return true; |
} |
-bool LoggingWriteFD(int fd, const void* buffer, size_t size) { |
+bool LoggingWriteFile(FileHandle file, const void* buffer, size_t size) { |
ssize_t expect = base::checked_cast<ssize_t>(size); |
- ssize_t rv = WriteFD(fd, buffer, size); |
+ ssize_t rv = WriteFile(file, buffer, size); |
if (rv < 0) { |
PLOG(ERROR) << "write"; |
return false; |
@@ -104,17 +49,17 @@ bool LoggingWriteFD(int fd, const void* buffer, size_t size) { |
return true; |
} |
-void CheckedReadFD(int fd, void* buffer, size_t size) { |
- CHECK(LoggingReadFD(fd, buffer, size)); |
+void CheckedReadFile(FileHandle file, void* buffer, size_t size) { |
+ CHECK(LoggingReadFile(file, buffer, size)); |
} |
-void CheckedWriteFD(int fd, const void* buffer, size_t size) { |
- CHECK(LoggingWriteFD(fd, buffer, size)); |
+void CheckedWriteFile(FileHandle file, const void* buffer, size_t size) { |
+ CHECK(LoggingWriteFile(file, buffer, size)); |
} |
-void CheckedReadFDAtEOF(int fd) { |
+void CheckedReadFileAtEOF(FileHandle file) { |
char c; |
- ssize_t rv = ReadFD(fd, &c, 1); |
+ ssize_t rv = ReadFile(file, &c, 1); |
if (rv < 0) { |
PCHECK(rv == 0) << "read"; |
} else { |
@@ -122,14 +67,8 @@ void CheckedReadFDAtEOF(int fd) { |
} |
} |
-bool LoggingCloseFD(int fd) { |
- int rv = IGNORE_EINTR(close(fd)); |
- PLOG_IF(ERROR, rv != 0) << "close"; |
- return rv == 0; |
-} |
- |
-void CheckedCloseFD(int fd) { |
- CHECK(LoggingCloseFD(fd)); |
+void CheckedCloseFile(FileHandle file) { |
+ CHECK(LoggingCloseFile(file)); |
} |
} // namespace crashpad |