Untangle VarFind and, while rewriting most of the function, fix the
authorMax Okumoto <okumoto@dragonflybsd.org>
Wed, 9 Feb 2005 20:40:38 +0000 (20:40 +0000)
committerMax Okumoto <okumoto@dragonflybsd.org>
Wed, 9 Feb 2005 20:40:38 +0000 (20:40 +0000)
intendation. (A large part of the function was already at intendation 8).
Cool! much cleaner.

Taken-from: FreeBSD
Author: harti

usr.bin/make/var.c

index 7b9dcd4..55204af 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)var.c   8.3 (Berkeley) 3/19/94
  * $FreeBSD: src/usr.bin/make/var.c,v 1.16.2.3 2002/02/27 14:18:57 cjc Exp $
- * $DragonFly: src/usr.bin/make/var.c,v 1.72 2005/02/09 20:26:53 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/var.c,v 1.73 2005/02/09 20:40:38 okumoto Exp $
  */
 
 /*-
@@ -258,9 +258,9 @@ VarPossiblyExpand(const char *name, GNode *ctxt)
 static Var *
 VarFind(const char *name, GNode *ctxt, int flags)
 {
-    Boolean            localCheckEnvFirst;
-    LstNode            *var;
-    Var                        *v;
+       Boolean localCheckEnvFirst;
+       LstNode *var;
+       char    *env;
 
        /*
         * If the variable name begins with a '.', it could very well be one of
@@ -301,52 +301,60 @@ VarFind(const char *name, GNode *ctxt, int flags)
                }
        }
 
-    /*
-     * Note whether this is one of the specific variables we were told through
-     * the -E flag to use environment-variable-override for.
-     */
-    if (Lst_Find(&envFirstVars, name, (CompareProc *)strcmp) != NULL) {
-       localCheckEnvFirst = TRUE;
-    } else {
-       localCheckEnvFirst = FALSE;
-    }
+       /*
+        * Note whether this is one of the specific variables we were told
+        * through the -E flag to use environment-variable-override for.
+        */
+       if (Lst_Find(&envFirstVars, name, (CompareProc *)strcmp) != NULL) {
+               localCheckEnvFirst = TRUE;
+       } else {
+               localCheckEnvFirst = FALSE;
+       }
 
-    /*
-     * First look for the variable in the given context. If it's not there,
-     * look for it in VAR_CMD, VAR_GLOBAL and the environment, in that order,
-     * depending on the FIND_* flags in 'flags'
-     */
-    var = Lst_Find(&ctxt->context, name, VarCmp);
+       /*
+        * First look for the variable in the given context. If it's not there,
+        * look for it in VAR_CMD, VAR_GLOBAL and the environment,
+        * in that order, depending on the FIND_* flags in 'flags'
+        */
+       var = Lst_Find(&ctxt->context, name, VarCmp);
+       if (var != NULL) {
+               /* got it */
+               return (Lst_Datum(var));
+       }
 
-    if ((var == NULL) && (flags & FIND_CMD) && (ctxt != VAR_CMD)) {
-       var = Lst_Find(&VAR_CMD->context, name, VarCmp);
-    }
-    if ((var == NULL) && (flags & FIND_GLOBAL) && (ctxt != VAR_GLOBAL) &&
-       !checkEnvFirst && !localCheckEnvFirst)
-    {
-       var = Lst_Find(&VAR_GLOBAL->context, name, VarCmp);
-    }
-    if ((var == NULL) && (flags & FIND_ENV)) {
-       char *env;
+       /* not there - try command line context */
+       if ((flags & FIND_CMD) && (ctxt != VAR_CMD)) {
+               var = Lst_Find(&VAR_CMD->context, name, VarCmp);
+               if (var != NULL)
+                       return (Lst_Datum(var));
+       }
 
-       if ((env = getenv(name)) != NULL) {
-           v = VarCreate(name, env, VAR_FROM_ENV);
+       /* not there - try global context, but only if not -e/-E */
+       if ((flags & FIND_GLOBAL) && (ctxt != VAR_GLOBAL) &&
+           !checkEnvFirst && !localCheckEnvFirst) {
+               var = Lst_Find(&VAR_GLOBAL->context, name, VarCmp);
+               if (var != NULL)
+                       return (Lst_Datum(var));
+       }
 
-           return (v);
-       } else if ((checkEnvFirst || localCheckEnvFirst) &&
-                  (flags & FIND_GLOBAL) && (ctxt != VAR_GLOBAL))
-       {
-           var = Lst_Find(&VAR_GLOBAL->context, name, VarCmp);
-       } else {
-           return (NULL);
+       if (!(flags & FIND_ENV))
+               /* we were not told to look into the environment */
+               return (NULL);
+
+       /* look in the environment */
+       if ((env = getenv(name)) != NULL) {
+               /* craft this variable from the environment value */
+               return (VarCreate(name, env, VAR_FROM_ENV));
        }
-    }
 
-    if (var == NULL) {
+       /* deferred check for the environment (in case of -e/-E) */
+       if ((checkEnvFirst || localCheckEnvFirst) &&
+           (flags & FIND_GLOBAL) && (ctxt != VAR_GLOBAL)) {
+               var = Lst_Find(&VAR_GLOBAL->context, name, VarCmp);
+               if (var != NULL)
+                       return (Lst_Datum(var));
+       }
        return (NULL);
-    } else {
-       return (Lst_Datum(var));
-    }
 }
 
 /*-