diff options
Diffstat (limited to 'qemu_pipe/qemu_pipe.cpp')
-rw-r--r-- | qemu_pipe/qemu_pipe.cpp | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/qemu_pipe/qemu_pipe.cpp b/qemu_pipe/qemu_pipe.cpp index a4529deb8..ca3b79578 100644 --- a/qemu_pipe/qemu_pipe.cpp +++ b/qemu_pipe/qemu_pipe.cpp | |||
@@ -22,6 +22,10 @@ | |||
22 | #include <errno.h> | 22 | #include <errno.h> |
23 | #include <stdio.h> | 23 | #include <stdio.h> |
24 | 24 | ||
25 | #include <android-base/file.h> | ||
26 | |||
27 | using android::base::ReadFully; | ||
28 | using android::base::WriteFully; | ||
25 | 29 | ||
26 | // Define QEMU_PIPE_DEBUG if you want to print error messages when an error | 30 | // Define QEMU_PIPE_DEBUG if you want to print error messages when an error |
27 | // occurs during pipe operations. The macro should simply take a printf-style | 31 | // occurs during pipe operations. The macro should simply take a printf-style |
@@ -66,15 +70,10 @@ int qemu_pipe_open(const char* pipeName) { | |||
66 | 70 | ||
67 | // Write the pipe name, *including* the trailing zero which is necessary. | 71 | // Write the pipe name, *including* the trailing zero which is necessary. |
68 | size_t pipeNameLen = strlen(pipeName); | 72 | size_t pipeNameLen = strlen(pipeName); |
69 | ssize_t ret = TEMP_FAILURE_RETRY(write(fd, pipeName, pipeNameLen + 1U)); | 73 | if (!WriteFully(fd, pipeName, pipeNameLen + 1U)) { |
70 | if (ret != (ssize_t)pipeNameLen + 1) { | ||
71 | QEMU_PIPE_DEBUG("%s: Could not connect to %s pipe service: %s", | 74 | QEMU_PIPE_DEBUG("%s: Could not connect to %s pipe service: %s", |
72 | __FUNCTION__, pipeName, strerror(errno)); | 75 | __FUNCTION__, pipeName, strerror(errno)); |
73 | if (ret == 0) { | 76 | close(fd); |
74 | errno = ECONNRESET; | ||
75 | } else if (ret > 0) { | ||
76 | errno = EINVAL; | ||
77 | } | ||
78 | return -1; | 77 | return -1; |
79 | } | 78 | } |
80 | return fd; | 79 | return fd; |
@@ -86,13 +85,11 @@ int qemu_pipe_open(const char* pipeName) { | |||
86 | int qemu_pipe_frame_send(int fd, const void* buff, size_t len) { | 85 | int qemu_pipe_frame_send(int fd, const void* buff, size_t len) { |
87 | char header[5]; | 86 | char header[5]; |
88 | snprintf(header, sizeof(header), "%04zx", len); | 87 | snprintf(header, sizeof(header), "%04zx", len); |
89 | ssize_t ret = TEMP_FAILURE_RETRY(write(fd, header, 4)); | 88 | if (!WriteFully(fd, header, 4)) { |
90 | if (ret != 4) { | ||
91 | QEMU_PIPE_DEBUG("Can't write qemud frame header: %s", strerror(errno)); | 89 | QEMU_PIPE_DEBUG("Can't write qemud frame header: %s", strerror(errno)); |
92 | return -1; | 90 | return -1; |
93 | } | 91 | } |
94 | ret = TEMP_FAILURE_RETRY(write(fd, buff, len)); | 92 | if (!WriteFully(fd, buff, len)) { |
95 | if (ret != (ssize_t)len) { | ||
96 | QEMU_PIPE_DEBUG("Can't write qemud frame payload: %s", strerror(errno)); | 93 | QEMU_PIPE_DEBUG("Can't write qemud frame payload: %s", strerror(errno)); |
97 | return -1; | 94 | return -1; |
98 | } | 95 | } |
@@ -106,8 +103,7 @@ int qemu_pipe_frame_send(int fd, const void* buff, size_t len) { | |||
106 | // end-of-stream. | 103 | // end-of-stream. |
107 | int qemu_pipe_frame_recv(int fd, void* buff, size_t len) { | 104 | int qemu_pipe_frame_recv(int fd, void* buff, size_t len) { |
108 | char header[5]; | 105 | char header[5]; |
109 | ssize_t ret = TEMP_FAILURE_RETRY(read(fd, header, 4)); | 106 | if (!ReadFully(fd, header, 4)) { |
110 | if (ret != 4) { | ||
111 | QEMU_PIPE_DEBUG("Can't read qemud frame header: %s", strerror(errno)); | 107 | QEMU_PIPE_DEBUG("Can't read qemud frame header: %s", strerror(errno)); |
112 | return -1; | 108 | return -1; |
113 | } | 109 | } |
@@ -122,8 +118,7 @@ int qemu_pipe_frame_recv(int fd, void* buff, size_t len) { | |||
122 | len); | 118 | len); |
123 | return -1; | 119 | return -1; |
124 | } | 120 | } |
125 | ret = TEMP_FAILURE_RETRY(read(fd, buff, size)); | 121 | if (!ReadFully(fd, buff, size)) { |
126 | if (ret != (ssize_t)size) { | ||
127 | QEMU_PIPE_DEBUG("Could not read qemud frame payload: %s", | 122 | QEMU_PIPE_DEBUG("Could not read qemud frame payload: %s", |
128 | strerror(errno)); | 123 | strerror(errno)); |
129 | return -1; | 124 | return -1; |