Diff between fb844615390f3ba6b3703afb085167ef7ada9b03 and 467fcb8094c15b6989a1a529e266f7cd2d82c4ea

Changed Files

File Additions Deletions Status
btio/btio.c +8 -6 modified

Full Patch

diff --git a/btio/btio.c b/btio/btio.c
index 6db1756..a129bf9 100644
--- a/btio/btio.c
+++ b/btio/btio.c
@@ -153,16 +153,18 @@ static gboolean connect_cb(GIOChannel *io, GIOCondition cond,
 		return FALSE;
 
 	if (cond & G_IO_OUT) {
-		int err = 0, sock = g_io_channel_unix_get_fd(io);
-		socklen_t len = sizeof(err);
+		int err, sk_err = 0, sock = g_io_channel_unix_get_fd(io);
+		socklen_t len = sizeof(sk_err);
 
-		if (getsockopt(sock, SOL_SOCKET, SO_ERROR, &err, &len) < 0)
-			err = errno;
+		if (getsockopt(sock, SOL_SOCKET, SO_ERROR, &sk_err, &len) < 0)
+			err = -errno;
+		else
+			err = -sk_err;
 
-		if (err)
+		if (err < 0)
 			g_set_error(&gerr, BT_IO_ERROR,
 					BT_IO_ERROR_CONNECT_FAILED, "%s (%d)",
-					strerror(err), err);
+					strerror(-err), -err);
 	} else if (cond & (G_IO_HUP | G_IO_ERR))
 		g_set_error(&gerr, BT_IO_ERROR, BT_IO_ERROR_CONNECT_FAILED,
 				"HUP or ERR on socket");