aboutsummaryrefslogtreecommitdiff
path: root/src/client/minidump_file_writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/minidump_file_writer.cc')
-rw-r--r--src/client/minidump_file_writer.cc21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/client/minidump_file_writer.cc b/src/client/minidump_file_writer.cc
index fdd59198..354ffc90 100644
--- a/src/client/minidump_file_writer.cc
+++ b/src/client/minidump_file_writer.cc
@@ -37,6 +37,8 @@
#include <string.h>
#include <unistd.h>
+#include "common/linux/linux_syscall_support.h"
+#include "common/linux/linux_libc_support.h"
#include "client/minidump_file_writer-inl.h"
#include "common/string_conversion.h"
@@ -53,7 +55,11 @@ MinidumpFileWriter::~MinidumpFileWriter() {
bool MinidumpFileWriter::Open(const char *path) {
assert(file_ == -1);
+#if __linux__
+ file_ = sys_open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
+#else
file_ = open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
+#endif
return file_ != -1;
}
@@ -63,7 +69,11 @@ bool MinidumpFileWriter::Close() {
if (file_ != -1) {
ftruncate(file_, position_);
+#if __linux__
+ result = (sys_close(file_) == 0);
+#else
result = (close(file_) == 0);
+#endif
file_ = -1;
}
@@ -227,9 +237,16 @@ bool MinidumpFileWriter::Copy(MDRVA position, const void *src, ssize_t size) {
return false;
// Seek and write the data
- if (lseek(file_, position, SEEK_SET) == static_cast<off_t>(position))
- if (write(file_, src, size) == size)
+#if __linux__
+ if (sys_lseek(file_, position, SEEK_SET) == static_cast<off_t>(position)) {
+ if (sys_write(file_, src, size) == size) {
+#else
+ if (lseek(file_, position, SEEK_SET) == static_cast<off_t>(position)) {
+ if (write(file_, src, size) == size) {
+#endif
return true;
+ }
+ }
return false;
}