aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/linux/eintr_wrapper.h19
-rw-r--r--src/common/linux/memory_mapped_file_unittest.cc1
-rw-r--r--src/common/tests/file_utils.cc10
3 files changed, 20 insertions, 10 deletions
diff --git a/src/common/linux/eintr_wrapper.h b/src/common/linux/eintr_wrapper.h
index 20b6bed1..35e5e245 100644
--- a/src/common/linux/eintr_wrapper.h
+++ b/src/common/linux/eintr_wrapper.h
@@ -37,11 +37,22 @@
//
#define HANDLE_EINTR(x) ({ \
- typeof(x) __eintr_result__; \
+ typeof(x) eintr_wrapper_result; \
do { \
- __eintr_result__ = x; \
- } while (__eintr_result__ == -1 && errno == EINTR); \
- __eintr_result__;\
+ eintr_wrapper_result = (x); \
+ } while (eintr_wrapper_result == -1 && errno == EINTR); \
+ eintr_wrapper_result; \
+})
+
+#define IGNORE_EINTR(x) ({ \
+ typeof(x) eintr_wrapper_result; \
+ do { \
+ eintr_wrapper_result = (x); \
+ if (eintr_wrapper_result == -1 && errno == EINTR) { \
+ eintr_wrapper_result = 0; \
+ } \
+ } while (0); \
+ eintr_wrapper_result; \
})
#endif // COMMON_LINUX_EINTR_WRAPPER_H_
diff --git a/src/common/linux/memory_mapped_file_unittest.cc b/src/common/linux/memory_mapped_file_unittest.cc
index 7c34e708..4fa50cf9 100644
--- a/src/common/linux/memory_mapped_file_unittest.cc
+++ b/src/common/linux/memory_mapped_file_unittest.cc
@@ -37,7 +37,6 @@
#include <string>
#include "breakpad_googletest_includes.h"
-#include "common/linux/eintr_wrapper.h"
#include "common/linux/memory_mapped_file.h"
#include "common/tests/auto_tempdir.h"
#include "common/tests/file_utils.h"
diff --git a/src/common/tests/file_utils.cc b/src/common/tests/file_utils.cc
index 80a6b650..1c041777 100644
--- a/src/common/tests/file_utils.cc
+++ b/src/common/tests/file_utils.cc
@@ -51,7 +51,7 @@ bool CopyFile(const char* from_path, const char* to_path) {
int outfile = HANDLE_EINTR(creat(to_path, 0666));
if (outfile < 0) {
perror("creat");
- if (HANDLE_EINTR(close(infile)) < 0) {
+ if (IGNORE_EINTR(close(infile)) < 0) {
perror("close");
}
return false;
@@ -84,11 +84,11 @@ bool CopyFile(const char* from_path, const char* to_path) {
} while (bytes_written_per_read < bytes_read);
}
- if (HANDLE_EINTR(close(infile)) == -1) {
+ if (IGNORE_EINTR(close(infile)) == -1) {
perror("close");
result = false;
}
- if (HANDLE_EINTR(close(outfile)) == -1) {
+ if (IGNORE_EINTR(close(outfile)) == -1) {
perror("close");
result = false;
}
@@ -112,7 +112,7 @@ bool ReadFile(const char* path, void* buffer, ssize_t* buffer_size) {
ok = false;
}
}
- if (HANDLE_EINTR(close(fd)) == -1) {
+ if (IGNORE_EINTR(close(fd)) == -1) {
perror("close");
ok = false;
}
@@ -143,7 +143,7 @@ bool WriteFile(const char* path, const void* buffer, size_t buffer_size) {
bytes_written_total += bytes_written_partial;
}
}
- if (HANDLE_EINTR(close(fd)) == -1) {
+ if (IGNORE_EINTR(close(fd)) == -1) {
perror("close");
ok = false;
}