Remove usage of compat from client

When used in client headers, the downstream dependency on compat
is unpleasant, so avoid that.

This is another alternative rather than
https://codereview.chromium.org/1424443002/.

R=mark@chromium.org
BUG=chromium:546288, crashpad:1

Review URL: https://codereview.chromium.org/1419673007 .
This commit is contained in:
Scott Graham 2015-10-22 14:01:33 -07:00
parent 90ef7475cd
commit a43323a1bf
5 changed files with 25 additions and 15 deletions

View File

@ -21,7 +21,6 @@
'target_name': 'crashpad_client',
'type': 'static_library',
'dependencies': [
'../compat/compat.gyp:crashpad_compat',
'../third_party/mini_chromium/mini_chromium.gyp:base',
'../util/util.gyp:crashpad_util',
],

View File

@ -22,7 +22,6 @@
'type': 'executable',
'dependencies': [
'client.gyp:crashpad_client',
'../compat/compat.gyp:crashpad_compat',
'../test/test.gyp:crashpad_test',
'../third_party/gmock/gmock.gyp:gmock',
'../third_party/gtest/gtest.gyp:gtest',

View File

@ -67,11 +67,14 @@ using ScopedFileHandle = base::ScopedFD;
//! \brief A value that can never be a valid FileHandle.
const FileHandle kInvalidFileHandle = -1;
using FileOperationResult = ssize_t;
#elif defined(OS_WIN)
using FileHandle = HANDLE;
using FileOffset = LONGLONG;
using ScopedFileHandle = ScopedFileHANDLE;
using FileOperationResult = LONG_PTR;
const FileHandle kInvalidFileHandle = INVALID_HANDLE_VALUE;
@ -126,7 +129,7 @@ enum class FileLocking : bool {
//! \sa LoggingReadFile
//! \sa CheckedReadFile
//! \sa CheckedReadFileAtEOF
ssize_t ReadFile(FileHandle file, void* buffer, size_t size);
FileOperationResult ReadFile(FileHandle file, void* buffer, size_t size);
//! \brief Writes to a file, retrying when interrupted or following a short
//! write on POSIX.
@ -141,7 +144,7 @@ ssize_t ReadFile(FileHandle file, void* buffer, size_t size);
//! \sa ReadFile
//! \sa LoggingWriteFile
//! \sa CheckedWriteFile
ssize_t WriteFile(FileHandle file, const void* buffer, size_t size);
FileOperationResult WriteFile(FileHandle file, const void* buffer, size_t size);
//! \brief Wraps ReadFile(), ensuring that exactly \a size bytes are read.
//!

View File

@ -28,7 +28,9 @@ namespace {
struct ReadTraits {
using VoidBufferType = void*;
using CharBufferType = char*;
static ssize_t Operate(int fd, CharBufferType buffer, size_t size) {
static FileOperationResult Operate(int fd,
CharBufferType buffer,
size_t size) {
return read(fd, buffer, size);
}
};
@ -36,21 +38,24 @@ struct ReadTraits {
struct WriteTraits {
using VoidBufferType = const void*;
using CharBufferType = const char*;
static ssize_t Operate(int fd, CharBufferType buffer, size_t size) {
static FileOperationResult 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) {
FileOperationResult 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;
FileOperationResult total_bytes = 0;
while (size > 0) {
ssize_t bytes = HANDLE_EINTR(Traits::Operate(fd, buffer_c, size));
FileOperationResult bytes =
HANDLE_EINTR(Traits::Operate(fd, buffer_c, size));
if (bytes < 0) {
return bytes;
} else if (bytes == 0) {
@ -102,11 +107,13 @@ FileHandle OpenFileForOutput(int rdwr_or_wronly,
} // namespace
ssize_t ReadFile(FileHandle file, void* buffer, size_t size) {
FileOperationResult ReadFile(FileHandle file, void* buffer, size_t size) {
return ReadOrWrite<ReadTraits>(file, buffer, size);
}
ssize_t WriteFile(FileHandle file, const void* buffer, size_t size) {
FileOperationResult WriteFile(FileHandle file,
const void* buffer,
size_t size) {
return ReadOrWrite<WriteTraits>(file, buffer, size);
}

View File

@ -72,7 +72,7 @@ FileHandle OpenFileForOutput(DWORD access,
// TODO(scottmg): Handle > DWORD sized writes if necessary.
ssize_t ReadFile(FileHandle file, void* buffer, size_t size) {
FileOperationResult ReadFile(FileHandle file, void* buffer, size_t size) {
DCHECK(!IsSocketHandle(file));
DWORD size_dword = base::checked_cast<DWORD>(size);
DWORD total_read = 0;
@ -103,7 +103,9 @@ ssize_t ReadFile(FileHandle file, void* buffer, size_t size) {
return total_read;
}
ssize_t WriteFile(FileHandle file, const void* buffer, size_t size) {
FileOperationResult WriteFile(FileHandle file,
const void* buffer,
size_t size) {
// TODO(scottmg): This might need to handle the limit for pipes across a
// network in the future.
DWORD size_dword = base::checked_cast<DWORD>(size);