summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbohu2017-03-29 14:19:49 -0500
committerbohu2017-03-29 14:19:49 -0500
commitee13ff1b9981f753741a60de5f9b12161e124b5d (patch)
treed032f3a852eac66e4f11abfcd2ea43181edae3ae /qemu_pipe
parentf66a7ee897ff8bc40ef1adb233178ba6ba83c0f7 (diff)
downloadplatform-system-core-ee13ff1b9981f753741a60de5f9b12161e124b5d.tar.gz
platform-system-core-ee13ff1b9981f753741a60de5f9b12161e124b5d.tar.xz
platform-system-core-ee13ff1b9981f753741a60de5f9b12161e124b5d.zip
Revert "Revert "Emulator: Enhance qemu_pipe.h to handle partial rw""
This reverts commit ec768709cc029d307b9e57e8dce193b7ee8c2321.
Diffstat (limited to 'qemu_pipe')
-rw-r--r--qemu_pipe/qemu_pipe.cpp25
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
27using android::base::ReadFully;
28using 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) {
86int qemu_pipe_frame_send(int fd, const void* buff, size_t len) { 85int 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.
107int qemu_pipe_frame_recv(int fd, void* buff, size_t len) { 104int 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;