mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-09 14:06:33 +00:00
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:
parent
90ef7475cd
commit
a43323a1bf
@ -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',
|
||||
],
|
||||
|
@ -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',
|
||||
|
@ -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.
|
||||
//!
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user