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>
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 @@
                             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 @@
 
 done:
     if ((ret == -1) && errno) {
-        ret = -errno;
+        errno_save = errno;
     }
     close(sock);
+    if (errno_save) {
+        errno = errno_save;
+    }
     return ret;
 }
 
@@ -305,6 +308,7 @@
     }
 
     if (strncmp(buf, "success", 7)) {
+        errno = EINVAL;
         return -1;
     }