diff options
Diffstat (limited to 'qemu_pipe')
| -rw-r--r-- | qemu_pipe/qemu_pipe.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/qemu_pipe/qemu_pipe.cpp b/qemu_pipe/qemu_pipe.cpp index ca3b79578..a4529deb8 100644 --- a/qemu_pipe/qemu_pipe.cpp +++ b/qemu_pipe/qemu_pipe.cpp @@ -22,10 +22,6 @@ #include <errno.h> #include <stdio.h> -#include <android-base/file.h> - -using android::base::ReadFully; -using android::base::WriteFully; // Define QEMU_PIPE_DEBUG if you want to print error messages when an error // occurs during pipe operations. The macro should simply take a printf-style @@ -70,10 +66,15 @@ int qemu_pipe_open(const char* pipeName) { // Write the pipe name, *including* the trailing zero which is necessary. size_t pipeNameLen = strlen(pipeName); - if (!WriteFully(fd, pipeName, pipeNameLen + 1U)) { + ssize_t ret = TEMP_FAILURE_RETRY(write(fd, pipeName, pipeNameLen + 1U)); + if (ret != (ssize_t)pipeNameLen + 1) { QEMU_PIPE_DEBUG("%s: Could not connect to %s pipe service: %s", __FUNCTION__, pipeName, strerror(errno)); - close(fd); + if (ret == 0) { + errno = ECONNRESET; + } else if (ret > 0) { + errno = EINVAL; + } return -1; } return fd; @@ -85,11 +86,13 @@ int qemu_pipe_open(const char* pipeName) { int qemu_pipe_frame_send(int fd, const void* buff, size_t len) { char header[5]; snprintf(header, sizeof(header), "%04zx", len); - if (!WriteFully(fd, header, 4)) { + ssize_t ret = TEMP_FAILURE_RETRY(write(fd, header, 4)); + if (ret != 4) { QEMU_PIPE_DEBUG("Can't write qemud frame header: %s", strerror(errno)); return -1; } - if (!WriteFully(fd, buff, len)) { + ret = TEMP_FAILURE_RETRY(write(fd, buff, len)); + if (ret != (ssize_t)len) { QEMU_PIPE_DEBUG("Can't write qemud frame payload: %s", strerror(errno)); return -1; } @@ -103,7 +106,8 @@ int qemu_pipe_frame_send(int fd, const void* buff, size_t len) { // end-of-stream. int qemu_pipe_frame_recv(int fd, void* buff, size_t len) { char header[5]; - if (!ReadFully(fd, header, 4)) { + ssize_t ret = TEMP_FAILURE_RETRY(read(fd, header, 4)); + if (ret != 4) { QEMU_PIPE_DEBUG("Can't read qemud frame header: %s", strerror(errno)); return -1; } @@ -118,7 +122,8 @@ int qemu_pipe_frame_recv(int fd, void* buff, size_t len) { len); return -1; } - if (!ReadFully(fd, buff, size)) { + ret = TEMP_FAILURE_RETRY(read(fd, buff, size)); + if (ret != (ssize_t)size) { QEMU_PIPE_DEBUG("Could not read qemud frame payload: %s", strerror(errno)); return -1; |
