openggsn: Check return codes and take error paths on failure.

Return early when socket() returns -1, and check return codes where indicated by some TODOs.  This removes 2 TODOs and fixes a compiler warning about assignment to a variable which then isn't used.

Signed-off-by: Michael McTernan <mike.mcternan@wavemobile.com>
Index: osmobss/openggsn/lib/tun.c
===================================================================
--- osmobss.orig/openggsn/lib/tun.c	2015-04-28 10:51:37.960449539 +0100
+++ osmobss/openggsn/lib/tun.c	2015-04-28 12:44:46.288765731 +0100
@@ -117,6 +117,7 @@ int tun_sifflags(struct tun_t *this, int
 	ifr.ifr_name[IFNAMSIZ - 1] = 0;	/* Make sure to terminate */
 	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
 		SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
+		return -1;
 	}
 	if (ioctl(fd, SIOCSIFFLAGS, &ifr)) {
 		SYS_ERR(DTUN, LOGL_ERROR, errno,
@@ -304,7 +305,8 @@ int tun_addaddr(struct tun_t *this,
 	iov.iov_len = req.n.nlmsg_len;
 
 	msg.msg_name = (void *)&nladdr;
-	msg.msg_namelen = sizeof(nladdr), msg.msg_iov = &iov;
+	msg.msg_namelen = sizeof(nladdr);
+	msg.msg_iov = &iov;
 	msg.msg_iovlen = 1;
 	msg.msg_control = NULL;
 	msg.msg_controllen = 0;
@@ -318,9 +320,20 @@ int tun_addaddr(struct tun_t *this,
 	req.n.nlmsg_seq = 0;
 	req.n.nlmsg_flags |= NLM_F_ACK;
 
-	status = sendmsg(fd, &msg, 0);	/* TODO Error check */
+	status = sendmsg(fd, &msg, 0);
+	if (status != req.n.nlmsg_len) {
+		SYS_ERR(DTUN, LOGL_ERROR, errno, "sendmsg() failed, returned %d", status);
+		close(fd);
+		return -1;
+	}
+
+	status = tun_sifflags(this, IFF_UP | IFF_RUNNING);
+	if (status == -1) {
+		close(fd);
+		return -1;
+	}
+
 
-	tun_sifflags(this, IFF_UP | IFF_RUNNING);	/* TODO */
 	close(fd);
 	this->addrs++;
 	return 0;
