| Index: util/file/file_io_win.cc
|
| diff --git a/util/synchronization/semaphore.cc b/util/file/file_io_win.cc
|
| similarity index 44%
|
| copy from util/synchronization/semaphore.cc
|
| copy to util/file/file_io_win.cc
|
| index d513fa0dd43981acc72b1ff155fa2d1e77616388..e6e865d1460b9911c00088d7090371d0fa514cbb 100644
|
| --- a/util/synchronization/semaphore.cc
|
| +++ b/util/file/file_io_win.cc
|
| @@ -12,50 +12,39 @@
|
| // See the License for the specific language governing permissions and
|
| // limitations under the License.
|
|
|
| -#include "util/synchronization/semaphore.h"
|
| +#include "util/file/file_io.h"
|
|
|
| #include "base/logging.h"
|
| -#include "base/posix/eintr_wrapper.h"
|
| +#include "base/numerics/safe_conversions.h"
|
|
|
| namespace crashpad {
|
|
|
| -#if defined(OS_MACOSX)
|
| +// TODO(scottmg): Handle > DWORD sized writes if necessary.
|
|
|
| -Semaphore::Semaphore(int value)
|
| - : semaphore_(dispatch_semaphore_create(value)) {
|
| - CHECK(semaphore_) << "dispatch_semaphore_create";
|
| +ssize_t ReadFile(HANDLE file, void* buffer, size_t size) {
|
| + DWORD size_dword = base::checked_cast<DWORD>(size);
|
| + DWORD bytes_read;
|
| + BOOL rv = ::ReadFile(file, buffer, size_dword, &bytes_read, NULL);
|
| + if (!rv)
|
| + return -1;
|
| + return bytes_read;
|
| }
|
|
|
| -Semaphore::~Semaphore() {
|
| - dispatch_release(semaphore_);
|
| +ssize_t WriteFile(HANDLE 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);
|
| + DWORD bytes_written;
|
| + BOOL rv = ::WriteFile(file, buffer, size_dword, &bytes_written, NULL);
|
| + if (!rv)
|
| + return -1;
|
| + return bytes_written;
|
| }
|
|
|
| -void Semaphore::Wait() {
|
| - CHECK_EQ(dispatch_semaphore_wait(semaphore_, DISPATCH_TIME_FOREVER), 0);
|
| +bool LoggingCloseFile(HANDLE file) {
|
| + BOOL rv = ::CloseHandle(file);
|
| + PLOG_IF(ERROR, !rv) << "CloseHandle";
|
| + return rv;
|
| }
|
|
|
| -void Semaphore::Signal() {
|
| - dispatch_semaphore_signal(semaphore_);
|
| -}
|
| -
|
| -#else
|
| -
|
| -Semaphore::Semaphore(int value) {
|
| - PCHECK(sem_init(&semaphore_, 0, value) == 0) << "sem_init";
|
| -}
|
| -
|
| -Semaphore::~Semaphore() {
|
| - PCHECK(sem_destroy(&semaphore_)) << "sem_destroy";
|
| -}
|
| -
|
| -void Semaphore::Wait() {
|
| - PCHECK(HANDLE_EINTR(sem_wait(&semaphore_))) << "sem_wait";
|
| -}
|
| -
|
| -void Semaphore::Signal() {
|
| - PCHECK(sem_post(&semaphore_)) << "sem_post";
|
| -}
|
| -
|
| -#endif
|
| -
|
| } // namespace crashpad
|
|
|