From: Ben Pfaff Date: Thu, 7 Aug 2008 22:37:44 +0000 (-0700) Subject: Make vconn_open() consistently set *vconnp to NULL on failure. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37dc29f9304ee2530bff2eb69b6dd825a7b9dddb;p=openvswitch Make vconn_open() consistently set *vconnp to NULL on failure. Fixes issue #80. --- diff --git a/lib/vconn.c b/lib/vconn.c index 9d4659df..cdaa933c 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -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; }