When new error happend,then errno should be updated accordingly.
Otherwise, need to keep previous errno.

Reproduced steps:
pre-condition:
DUT support external SDcard or Usb mass storage;

1. Insert blank(no partition) SDcard or UMS to DUT;

Expected result:
Should prompt user with storage error.

Test result:
There is no notification for error.

Error log:
01-01 01:06:49.239 I/fsck_msdos( 200): fsck_msdos terminated by exit(8)
01-01 01:06:49.239 E/Vold ( 200): /dev/block/vold/179:16 failed FS checks (I/O error)
01-01 01:06:49.239 D/Vold ( 200): Volume sdcard1 state changing 3 (Checking) -> 1 (Idle-Unmounted)
01-01 01:06:49.239 W/Vold ( 200): Returning OperationFailed - no handler for errno 0)

Root cause analysis:
1.Volume::setState will call senBroadcase to send out state notification;
2.Finally, SocketClient::sendDataLockedv was called to sent message.
In sendDataLockedv funtion,  when current == iovcnt,  e is 0 by default.
So Vold get incorrect errno.

Change-Id: Icb32a4193f02f22b5e3feaba177bc278f8f1f41b
Signed-off-by: Bo Huang <bo.b.huang@intel.com>
diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp
index d3ce8f5..4ab06b4 100644
--- a/libsysutils/src/SocketClient.cpp
+++ b/libsysutils/src/SocketClient.cpp
@@ -220,7 +220,8 @@
 
     sigaction(SIGPIPE, &old_action, &new_action);
 
-    errno = e;
+    if ( e != 0 )
+        errno = e;
     return ret;
 }