diff options
author | Greg Hackmann <ghackmann@google.com> | 2014-03-17 13:08:31 -0700 |
---|---|---|
committer | Greg Hackmann <ghackmann@google.com> | 2014-03-17 13:16:27 -0700 |
commit | 8084a53897b424ee751599c36c587f8463759516 (patch) | |
tree | b5541d41ca23d2e987b30f499ed4608480a48d1d /liblog/log_read.c | |
parent | a0915abd2fb57113bc46e8d8fe5013ca4a9ef6e8 (diff) | |
download | system_core-8084a53897b424ee751599c36c587f8463759516.zip system_core-8084a53897b424ee751599c36c587f8463759516.tar.gz system_core-8084a53897b424ee751599c36c587f8463759516.tar.bz2 |
liblog: improve errno handling on read failure
1. socket() failures should skip close(), since sock is not an open fd
2. on other I/O related failures, preserve errno around the close() call
3. set errno to a meaningful value on check_log_success() failure
Change-Id: I0fb9e726ae5fee2f7b84344aa925e5159d57c360
Signed-off-by: Greg Hackmann <ghackmann@google.com>
Diffstat (limited to 'liblog/log_read.c')
-rw-r--r-- | liblog/log_read.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/liblog/log_read.c b/liblog/log_read.c index d96f129..2dd07e6 100644 --- a/liblog/log_read.c +++ b/liblog/log_read.c @@ -272,11 +272,11 @@ static ssize_t send_log_msg(struct logger *logger, const char *msg, char *buf, size_t buf_size) { ssize_t ret; + int errno_save = 0; int sock = socket_local_client("logd", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM); if (sock < 0) { - ret = sock; - goto done; + return sock; } if (msg) { @@ -292,9 +292,12 @@ static ssize_t send_log_msg(struct logger *logger, done: if ((ret == -1) && errno) { - ret = -errno; + errno_save = errno; } close(sock); + if (errno_save) { + errno = errno_save; + } return ret; } @@ -305,6 +308,7 @@ static int check_log_success(char *buf, ssize_t ret) } if (strncmp(buf, "success", 7)) { + errno = EINVAL; return -1; } |