Make vconn_open() consistently set *vconnp to NULL on failure.
authorBen Pfaff <blp@nicira.com>
Thu, 7 Aug 2008 22:37:44 +0000 (15:37 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 7 Aug 2008 22:37:44 +0000 (15:37 -0700)
Fixes issue #80.

lib/vconn.c

index 9d4659df871006ac7807b303e6caf38aac337302..cdaa933ce13fdfd08be3682a8d117777140add8b 100644 (file)
@@ -152,6 +152,7 @@ vconn_open(const char *name, struct vconn **vconnp)
 
     check_vconn_classes();
 
+    *vconnp = NULL;
     prefix_len = strcspn(name, ":");
     if (prefix_len == strlen(name)) {
         error(0, "`%s' not correct format for peer name", name);
@@ -161,14 +162,14 @@ vconn_open(const char *name, struct vconn **vconnp)
         struct vconn_class *class = vconn_classes[i];
         if (strlen(class->name) == prefix_len
             && !memcmp(class->name, name, prefix_len)) {
+            struct vconn *vconn;
             char *suffix_copy = xstrdup(name + prefix_len + 1);
-            int retval = class->open(name, suffix_copy, vconnp);
+            int retval = class->open(name, suffix_copy, &vconn);
             free(suffix_copy);
-            if (retval) {
-                *vconnp = NULL;
-            } else {
-                assert((*vconnp)->connect_status != EAGAIN
-                       || (*vconnp)->class->connect);
+            if (!retval) {
+                assert(vconn->connect_status != EAGAIN
+                       || vconn->class->connect);
+                *vconnp = vconn;
             }
             return retval;
         }