- Move Error case to top of elseif chain.
authorMax Okumoto <okumoto@dragonflybsd.org>
Wed, 9 Feb 2005 06:05:41 +0000 (06:05 +0000)
committerMax Okumoto <okumoto@dragonflybsd.org>
Wed, 9 Feb 2005 06:05:41 +0000 (06:05 +0000)
- Do not initialize startc, at top of function, but where a know
  valid value can be assigned.

usr.bin/make/var.c

index 2cd053c..5a92f39 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.69 2005/02/09 06:03:05 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/var.c,v 1.70 2005/02/09 06:05:41 okumoto Exp $
  */
 
 /*-
@@ -884,7 +884,7 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
     Boolean        haveModifier;/* TRUE if have modifiers for the variable */
     char           endc;       /* Ending character when variable in parens
                                 * or braces */
-    char           startc=0;   /* Starting character when variable in parens
+    char           startc;     /* Starting character when variable in parens
                                 * or braces */
     char           *start;
     char            delim;
@@ -903,7 +903,18 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
      * It is assumed that Var_Parse() is called with str[0] == '$'
      */
 
-    if (str[1] == OPEN_PAREN || str[1] == OPEN_BRACKET) {
+    if (str[1] == '\0') {
+       /*
+        * Error, there is only a dollar sign in the input string.
+        */
+       *lengthPtr = 1;
+       return (err ? var_Error : varNoError);
+
+    } else if (str[1] == OPEN_PAREN || str[1] == OPEN_BRACKET) {
+       /*
+        * Check if brackets contain a variable name.
+        */
+
        /* build up expanded variable name in this buffer */
        Buffer  *buf = Buf_Init(MAKE_BSIZE);
 
@@ -913,8 +924,8 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
         */
        startc = str[1];
        endc = (startc == OPEN_PAREN) ? CLOSE_PAREN : CLOSE_BRACKET;
+       tstr = str + 2;
 
-       tstr = str + 2;;
        while (*tstr != '\0' && *tstr != endc && *tstr != ':') {
            if (*tstr == '$') {
                size_t  rlen;
@@ -950,7 +961,7 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
        *tstr = '\0';                   /* modify input string */
 
        Buf_AddByte(buf, (Byte)'\0');
-       str = Buf_GetAll(buf, (size_t *)NULL);
+       str = Buf_GetAll(buf, (size_t *)NULL);  /* REPLACE str */ 
        vlen = strlen(str);
 
        v = VarFind(str, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD);
@@ -1078,13 +1089,6 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
        }
        Buf_Destroy(buf, TRUE);
 
-    } else if (str[1] == '\0') {
-       /*
-        * Error there is only a dollar sign!
-        */
-       *lengthPtr = 1;
-       return (err ? var_Error : varNoError);
-
     } else {
        /*
         * If it's not bounded by braces of some sort, life is much simpler.
@@ -1127,8 +1131,9 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
            }
        } else {
            haveModifier = FALSE;
-           tstr = &str[1];
+           startc = 0;
            endc = str[1];
+           tstr = &str[1];
        }
     }