From 7822702cf80de1902de5fe8fe0e7128690622a6f Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Tue, 26 Feb 2013 22:31:49 +0000 Subject: [PATCH] auth: Refactor afsconf_Open failure handler Refactor the code which returns a failure from afsconf_Open into a single section, rather than having multiple copies through out the routine. Reviewed-on: http://gerrit.openafs.org/9293 Tested-by: BuildBot Reviewed-by: Derrick Brashear Reviewed-by: Jeffrey Altman (cherry picked from commit a5324a6bb6ff127997c48b54f8ad0e98189f3f1e) Change-Id: I03f963b717c8095914dd994d7d5612bf57148ce7 Reviewed-on: http://gerrit.openafs.org/11020 Reviewed-by: Perry Ruiter Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Chas Williams - CONTRACTOR Reviewed-by: Stephan Wiesand --- src/auth/cellconfig.c | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/src/auth/cellconfig.c b/src/auth/cellconfig.c index e4425d22e..06cbada8d 100644 --- a/src/auth/cellconfig.c +++ b/src/auth/cellconfig.c @@ -465,22 +465,17 @@ afsconf_Open(const char *adir) if (!(home_dir = getenv("HOME"))) { /* Our last chance is the "/.AFSCONF" file */ fp = fopen("/.AFSCONF", "r"); - if (fp == 0) { - free(tdir); - UNLOCK_GLOBAL_MUTEX; - return (struct afsconf_dir *)0; - } + if (fp == 0) + goto fail; + fgets(afs_confdir, 128, fp); fclose(fp); } else { char *pathname = NULL; afs_asprintf(&pathname, "%s/%s", home_dir, ".AFSCONF"); - if (pathname == NULL) { - free(tdir); - UNLOCK_GLOBAL_MUTEX; - return (struct afsconf_dir *) 0; - } + if (pathname == NULL) + goto fail; fp = fopen(pathname, "r"); free(pathname); @@ -488,21 +483,16 @@ afsconf_Open(const char *adir) if (fp == 0) { /* Our last chance is the "/.AFSCONF" file */ fp = fopen("/.AFSCONF", "r"); - if (fp == 0) { - free(tdir); - UNLOCK_GLOBAL_MUTEX; - return (struct afsconf_dir *)0; - } + if (fp == 0) + goto fail; } fgets(afs_confdir, 128, fp); fclose(fp); } len = strlen(afs_confdir); - if (len == 0) { - free(tdir); - UNLOCK_GLOBAL_MUTEX; - return (struct afsconf_dir *)0; - } + if (len == 0) + goto fail; + if (afs_confdir[len - 1] == '\n') { afs_confdir[len - 1] = 0; } @@ -512,13 +502,16 @@ afsconf_Open(const char *adir) code = afsconf_OpenInternal(tdir, 0, 0); if (code) { free(tdir->name); - free(tdir); - UNLOCK_GLOBAL_MUTEX; - return (struct afsconf_dir *)0; + goto fail; } } UNLOCK_GLOBAL_MUTEX; return tdir; + +fail: + free(tdir); + UNLOCK_GLOBAL_MUTEX; + return NULL; } static int -- 2.39.5