diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/linux/eintr_wrapper.h | 19 | ||||
-rw-r--r-- | src/common/linux/memory_mapped_file_unittest.cc | 1 | ||||
-rw-r--r-- | src/common/tests/file_utils.cc | 10 |
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; } |