auth: Refactor afsconf_Open failure handler
authorSimon Wilkinson <sxw@your-file-system.com>
Tue, 26 Feb 2013 22:31:49 +0000 (22:31 +0000)
committerJeffrey Altman <jaltman@your-file-system.com>
Wed, 27 Feb 2013 20:41:20 +0000 (12:41 -0800)
Refactor the code which returns a failure from afsconf_Open into
a single section, rather than having multiple copies through out
the routine.

Change-Id: I70b3fec98321bf89e6d59055545d5d4193026d28
Reviewed-on: http://gerrit.openafs.org/9293
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>

src/auth/cellconfig.c

index 08cc6be..cffac98 100644 (file)
@@ -453,22 +453,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;
 
                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);
@@ -476,21 +471,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;
            }
@@ -500,13 +490,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