Skip to contentSkip to conversation

warn_unused_result fixes

PATCH New Charles Coffing 1 participant 1 message Jun 11, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 warn_unused_result fixes

More fixes prompted by gcc's warn_unused_result, in the tools directory.

Note that some of the existing error checking for asprintf was wrong for Linux. asprintf in glibc returns -1 on error, but leaves the pointer uninitialized. Only the BSDs zero out the pointer on error.

Also, while fixing these warnings I saw several error paths that were incorrect. This patch minimally fixes the warn_unused_result; more complete error path cleanup will be a later patch.

Please apply to xen-unstable.

tools/blktap/drivers/blktapctrl.c +18 -9
diff -ru xen-unstable.hg/tools/blktap/drivers/blktapctrl.c xen-unstable/tools/blktap/drivers/blktapctrl.c
@@ -143,7 +143,8 @@
 		return -1;
 	}
 
-	asprintf(&devname,"%s/%s%d",BLKTAP_DEV_DIR, BLKTAP_DEV_NAME, *minor);
+	if (asprintf(&devname,"%s/%s%d",BLKTAP_DEV_DIR, BLKTAP_DEV_NAME, *minor) == -1)
+		return -1;
 	make_blktap_dev(devname,*major,*minor);	
 	DPRINTF("Received device id %d and major %d, "
 		"sent domid %d and be_id %d\n",
@@ -495,20 +496,27 @@
 
 		if (!exist) {
 			DPRINTF("Process does not exist:\n");
-			asprintf(&rdctldev, 
-				 "%s/tapctrlread%d", BLKTAP_CTRL_DIR, minor);
-			blkif->fds[READ] = open_ctrl_socket(rdctldev);
-
+			if (asprintf(&rdctldev,
+				     "%s/tapctrlread%d", BLKTAP_CTRL_DIR, minor) == -1)
+				return -1;
+			if (asprintf(&wrctldev,
+				     "%s/tapctrlwrite%d", BLKTAP_CTRL_DIR, minor) == -1) {
+				free(rdctldev);
+				return -1;
+			}
+			if (asprintf(&cmd, "tapdisk %s %s", wrctldev, rdctldev) == -1) {
+				free(rdctldev);
+				free(wrctldev);
+				return -1;
+			}
 
-			asprintf(&wrctldev, 
-				 "%s/tapctrlwrite%d", BLKTAP_CTRL_DIR, minor);
+			blkif->fds[READ] = open_ctrl_socket(rdctldev);
 			blkif->fds[WRITE] = open_ctrl_socket(wrctldev);
 			
 			if (blkif->fds[READ] == -1 || blkif->fds[WRITE] == -1) 
 				goto fail;
 
 			/*launch the new process*/
-			asprintf(&cmd, "tapdisk %s %s", wrctldev, rdctldev);
 			DPRINTF("Launching process, CMDLINE [%s]\n",cmd);
 			if (system(cmd) == -1) {
 				DPRINTF("Unable to fork, cmdline: [%s]\n",cmd);
@@ -692,7 +700,8 @@
 	register_new_unmap_hook(unmap_blktapctrl);
 
 	/* Attach to blktap0 */
-	asprintf(&devname,"%s/%s0", BLKTAP_DEV_DIR, BLKTAP_DEV_NAME);
+	if (asprintf(&devname,"%s/%s0", BLKTAP_DEV_DIR, BLKTAP_DEV_NAME) == -1)
+                goto open_failed;
 	if ((ret = xc_find_device_number("blktap0")) < 0) {
 		DPRINTF("couldn't find device number for 'blktap0'\n");
 		goto open_failed;
tools/blktap/drivers/block-qcow.c +5 -2
diff -ru xen-unstable.hg/tools/blktap/drivers/block-qcow.c xen-unstable/tools/blktap/drivers/block-qcow.c
@@ -871,7 +871,10 @@
 	}
 
 	s->fd = fd;
-	asprintf(&s->name,"%s", name);
+	if (asprintf(&s->name,"%s", name) == -1) {
+		close(fd);
+		return -1;
+	}
 
 	ASSERT(sizeof(QCowHeader) + sizeof(QCowHeader_ext) < 512);
 
@@ -1165,7 +1168,7 @@
 		offset = sizeof(QCowHeader) + sizeof(uint32_t);
 		lseek(fd, offset, SEEK_SET);
 		out = cpu_to_be32(cksum);
-		write(fd, &out, sizeof(uint32_t));
+		if (write(fd, &out, sizeof(uint32_t))) ;
 		close(fd);
 	}
 
tools/blktap/drivers/tapdisk.c +2 -1
diff -ru xen-unstable.hg/tools/blktap/drivers/tapdisk.c xen-unstable/tools/blktap/drivers/tapdisk.c
@@ -220,7 +220,8 @@
 	fd_list_entry_t *ptr;
 	int page_size;
 
-	asprintf(&devname,"%s/%s%d", BLKTAP_DEV_DIR, BLKTAP_DEV_NAME, minor);
+	if (asprintf(&devname,"%s/%s%d", BLKTAP_DEV_DIR, BLKTAP_DEV_NAME, minor) == -1)
+		return -1;
 	tap_fd = open(devname, O_RDWR);
 	if (tap_fd == -1) 
 	{
tools/blktap/lib/xenbus.c +2 -4
diff -ru xen-unstable.hg/tools/blktap/lib/xenbus.c xen-unstable/tools/blktap/lib/xenbus.c
@@ -360,8 +360,7 @@
 	char *path;
 	struct xenbus_watch *vbd_watch;
 	
-	asprintf(&path, "/local/domain/%s/backend/tap", domid);
-	if (path == NULL) 
+	if (asprintf(&path, "/local/domain/%s/backend/tap", domid) == -1)
 		return -ENOMEM;
 	
 	vbd_watch = (struct xenbus_watch *)malloc(sizeof(struct xenbus_watch));
@@ -399,8 +398,7 @@
 	struct xenbus_watch *domid_watch;
 	char *path = NULL;
 
-	asprintf(&path, "/local/domain");
-	if (path == NULL) 
+	if (asprintf(&path, "/local/domain") == -1)
 		return -ENOMEM;
 
 	domid_watch = malloc(sizeof(struct xenbus_watch));
tools/blktap/lib/xs_api.c +22 -23

83 lines not on this page · raw message

tools/console/daemon/io.c +4 -1
diff -ru xen-unstable.hg/tools/console/daemon/io.c xen-unstable/tools/console/daemon/io.c
@@ -303,7 +303,10 @@
 		void *result = va_arg(ap, void *);
 		char *p;
 
-		asprintf(&path, "%s/%s", dir, name);
+		if (asprintf(&path, "%s/%s", dir, name) == -1) {
+			ret = ENOMEM;
+			break;
+		}
 		p = xs_read(xs, XBT_NULL, path, NULL);
 		free(path);
 		if (p == NULL) {

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel