diff options
| author | Reid Kleckner <rnk@google.com> | 2015-08-11 00:30:22 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2015-08-11 00:30:22 +0000 |
| commit | a0f78fef74f577efffb12a00feb8cc4f0c16e025 (patch) | |
| tree | ad2722bb495637467ea55f739cf3408d62d6a381 | |
| parent | f609c11b3d1e5fcb4354690329b7ef72d6aa3af4 (diff) | |
| download | bcm5719-llvm-a0f78fef74f577efffb12a00feb8cc4f0c16e025.tar.gz bcm5719-llvm-a0f78fef74f577efffb12a00feb8cc4f0c16e025.zip | |
[sanitizers] Use portable file read/write wrappers on process pipes
This fixes a minor error checking bug around calling
internal_read/write, and makes the code more portable for D11791.
llvm-svn: 244546
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h | 4 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc | 16 |
2 files changed, 11 insertions, 9 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h index 66ae809ed53..350e2a785dd 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h @@ -90,8 +90,8 @@ class SymbolizerProcess { } const char *path_; - int input_fd_; - int output_fd_; + fd_t input_fd_; + fd_t output_fd_; static const uptr kBufferSize = 16 * 1024; char buffer_[kBufferSize]; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc index f1c01a33249..87ac491412b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc @@ -55,9 +55,9 @@ const char *SymbolizerProcess::SendCommand(const char *command) { bool SymbolizerProcess::Restart() { if (input_fd_ != kInvalidFd) - internal_close(input_fd_); + CloseFile(input_fd_); if (output_fd_ != kInvalidFd) - internal_close(output_fd_); + CloseFile(output_fd_); return StartSymbolizerSubprocess(); } @@ -76,11 +76,12 @@ bool SymbolizerProcess::ReadFromSymbolizer(char *buffer, uptr max_length) { return true; uptr read_len = 0; while (true) { - uptr just_read = internal_read(input_fd_, buffer + read_len, - max_length - read_len - 1); + uptr just_read = 0; + bool success = ReadFromFile(input_fd_, buffer + read_len, + max_length - read_len - 1, &just_read); // We can't read 0 bytes, as we don't expect external symbolizer to close // its stdout. - if (just_read == 0 || just_read == (uptr)-1) { + if (!success || just_read == 0) { Report("WARNING: Can't read from symbolizer at fd %d\n", input_fd_); return false; } @@ -95,8 +96,9 @@ bool SymbolizerProcess::ReadFromSymbolizer(char *buffer, uptr max_length) { bool SymbolizerProcess::WriteToSymbolizer(const char *buffer, uptr length) { if (length == 0) return true; - uptr write_len = internal_write(output_fd_, buffer, length); - if (write_len == 0 || write_len == (uptr)-1) { + uptr write_len = 0; + bool success = WriteToFile(output_fd_, buffer, length, &write_len); + if (!success || write_len != length) { Report("WARNING: Can't write to symbolizer at fd %d\n", output_fd_); return false; } |

