summaryrefslogtreecommitdiffstats
path: root/adb
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2015-03-19 18:09:59 -0700
committerDan Albert <danalbert@google.com>2015-03-19 20:10:30 -0700
commit08f66bc771ac798d89451a9b68a1c6722352d683 (patch)
treed5efa514d80d78482c3d0924cc226480a4210daa /adb
parent8386a726d11785dee69a806a0d37147f7bad1e76 (diff)
downloadsystem_core-08f66bc771ac798d89451a9b68a1c6722352d683.zip
system_core-08f66bc771ac798d89451a9b68a1c6722352d683.tar.gz
system_core-08f66bc771ac798d89451a9b68a1c6722352d683.tar.bz2
The generic failure case disappeared...
Was manifesting as a write to a full disk hanging indefinitely. Bug: 19846181 Change-Id: Ia581e0bbbb331c221bdb68882c238d0cb9f8a0b3
Diffstat (limited to 'adb')
-rw-r--r--adb/adb_io.cpp2
-rw-r--r--adb/adb_io_test.cpp12
2 files changed, 14 insertions, 0 deletions
diff --git a/adb/adb_io.cpp b/adb/adb_io.cpp
index 4dd9f4d..1a74688 100644
--- a/adb/adb_io.cpp
+++ b/adb/adb_io.cpp
@@ -79,6 +79,8 @@ bool WriteFdExactly(int fd, const void* buf, size_t len) {
D("writex: fd=%d disconnected\n", fd);
errno = 0;
return false;
+ } else {
+ return false;
}
} else {
len -= r;
diff --git a/adb/adb_io_test.cpp b/adb/adb_io_test.cpp
index 0c69bc9..da340b2 100644
--- a/adb/adb_io_test.cpp
+++ b/adb/adb_io_test.cpp
@@ -18,8 +18,11 @@
#include <gtest/gtest.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <unistd.h>
#include <string>
@@ -127,6 +130,15 @@ TEST(io, WriteFdExactly_partial) {
EXPECT_EQ(expected, s);
}
+TEST(io, WriteFdExactly_ENOSPC) {
+ int fd = open("/dev/full", O_WRONLY);
+ ASSERT_NE(-1, fd);
+
+ char buf[] = "foo";
+ ASSERT_FALSE(WriteFdExactly(fd, buf, sizeof(buf)));
+ ASSERT_EQ(ENOSPC, errno);
+}
+
TEST(io, WriteStringFully) {
const char str[] = "Foobar";
TemporaryFile tf;