summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbohu <bohu@google.com>2017-03-28 14:51:23 -0700
committerbohu <bohu@google.com>2017-03-28 15:04:38 -0700
commitec768709cc029d307b9e57e8dce193b7ee8c2321 (patch)
tree79368499d4a988a034006579fb088a389b44d9bf
parent79b30058992ddf678a261a59172a009d6a0db0ed (diff)
downloadsystem_core-ec768709cc029d307b9e57e8dce193b7ee8c2321.tar.gz
system_core-ec768709cc029d307b9e57e8dce193b7ee8c2321.tar.bz2
system_core-ec768709cc029d307b9e57e8dce193b7ee8c2321.zip
Revert "Emulator: Enhance qemu_pipe.h to handle partial rw"
It broke master BUG: 36695011 This reverts commit 7b60bd95dfa07e86325b432465fb0043648f6c97. Change-Id: Idd45acb63b2e6112b4230de2c0609aa8f2092f45
-rw-r--r--qemu_pipe/qemu_pipe.cpp25
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;