PERFORCE change 108785 for review

Marcel Moolenaar marcel at FreeBSD.org
Mon Oct 30 23:31:16 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=108785

Change 108785 by marcel at marcel_cluster on 2006/10/30 23:30:02

	Fix devopen(). Clear f->f_devdata on failure so that
	devclose() doesn't try to free() an already freed
	allocation. While here, improve style.

Affected files ...

.. //depot/projects/ia64/sys/boot/common/devopen.c#3 edit

Differences ...

==== //depot/projects/ia64/sys/boot/common/devopen.c#3 (text+ko) ====

@@ -35,20 +35,25 @@
 int
 devopen(struct open_file *f, const char *fname, const char **file) 
 {
-    struct devdesc	*dev;
-    int			result;
+    struct devdesc *dev;
+    int result;
+
+    result = archsw.arch_getdev((void **)&dev, fname, file);
+    if (result)
+	return (result);
 
-    if ((result = archsw.arch_getdev((void *)&dev, fname, file)) == 0) {	/* get the device */
-	/* point to device-specific data so that device open can use it */
-	f->f_devdata = dev;
-	if ((result = dev->d_dev->dv_open(f, dev)) == 0) { 		/* try to open it */
-	    /* reference the devsw entry from the open_file structure */
-	    f->f_dev = dev->d_dev;
-	} else {
-	    free(dev);		/* release the device descriptor */
-	}
+    /* point to device-specific data so that device open can use it */
+    f->f_devdata = dev;
+    result = dev->d_dev->dv_open(f, dev);
+    if (result != 0) {
+	f->f_devdata = NULL;
+	free(dev);
+	return (result);
     }
-    return(result);
+
+    /* reference the devsw entry from the open_file structure */
+    f->f_dev = dev->d_dev;
+    return (0);
 }
 
 int


More information about the p4-projects mailing list