[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 15/24] 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 <Ian.Jackson@xxxxxxxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- tools/xenstore/xs.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c index 56caac7..65cba86 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) -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |