From: Ian Jackson Date: Fri, 15 Sep 2017 12:42:38 +0000 (+0100) Subject: tools/xenstore: get_handle: use "goto err" error handling style X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1147 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0e318c7b354dcd5347f7c327231f2b47cba7d7e0;p=xen.git tools/xenstore: get_handle: use "goto err" error handling style Replace the ad-hoc exit clauses with the error handling style where - local variables contain either things to be freed, or sentinels - all error exits go via an "err" label which frees everything Signed-off-by: Ian Jackson Acked-by: Wei Liu --- diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c index 56caac74cf..65cba86f93 100644 --- a/tools/xenstore/xs.c +++ b/tools/xenstore/xs.c @@ -226,7 +226,7 @@ static struct xs_handle *get_handle(const char *connect_to) int fd = -1, saved_errno; if (stat(connect_to, &buf) != 0) - return NULL; + goto err; if (S_ISSOCK(buf.st_mode)) fd = get_socket(connect_to); @@ -234,15 +234,11 @@ static struct xs_handle *get_handle(const char *connect_to) fd = get_dev(connect_to); if (fd == -1) - return NULL; + goto err; h = malloc(sizeof(*h)); - if (h == NULL) { - saved_errno = errno; - close(fd); - errno = saved_errno; - return NULL; - } + if (h == NULL) + goto err; memset(h, 0, sizeof(*h)); @@ -267,6 +263,15 @@ static struct xs_handle *get_handle(const char *connect_to) #endif return h; + +err: + saved_errno = errno; + + if (fd >= 0) close(fd); + free(h); + + errno = saved_errno; + return NULL; } struct xs_handle *xs_daemon_open(void)