--- src/usr.bin/make/var.c 2005/03/12 12:00:02 1.142 +++ src/usr.bin/make/var.c 2005/03/12 12:00:31 1.143 @@ -913,7 +913,6 @@ static char * modifier_M(const char mod[], const char value[], char endc, size_t *consumed) { const char *cur; - const char *end; char *patt; char *ptr; char *newValue; @@ -1560,7 +1559,7 @@ ParseRestModifier(const char input[], co } if ((ctxt == VAR_CMD) || (ctxt == VAR_GLOBAL)) { - if (((vlen == 1)) || + if ((vlen == 1) || ((vlen == 2) && (vname[1] == 'F' || vname[1] == 'D'))) { /* * If substituting a local variable in a non-local @@ -1638,20 +1637,20 @@ ParseRestEnd(const char input[], Buffer const char *vname; size_t vlen; Var *v; - char *result; + char *value; vname = Buf_GetAll(buf, &vlen); v = VarFind(vname, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD); if (v != NULL) { - result = VarExpand(v, ctxt, err); + value = VarExpand(v, ctxt, err); if (v->flags & VAR_FROM_ENV) { VarDestroy(v, TRUE); } *freePtr = TRUE; - return (result); + return (value); } if ((ctxt == VAR_CMD) || (ctxt == VAR_GLOBAL)) { @@ -1668,12 +1667,12 @@ ParseRestEnd(const char input[], Buffer if (((vlen == 1)) || ((vlen == 2) && (vname[1] == 'F' || vname[1] == 'D'))) { if (strchr("!%*@", vname[0]) != NULL) { - result = emalloc(*consumed + 1); - strncpy(result, input, *consumed); - result[*consumed] = '\0'; + value = emalloc(*consumed + 1); + strncpy(value, input, *consumed); + value[*consumed] = '\0'; *freePtr = TRUE; - return (result); + return (value); } } if ((vlen > 2) && @@ -1683,12 +1682,12 @@ ParseRestEnd(const char input[], Buffer (strncmp(vname, ".ARCHIVE", vlen - 1) == 0) || (strncmp(vname, ".PREFIX", vlen - 1) == 0) || (strncmp(vname, ".MEMBER", vlen - 1) == 0)) { - result = emalloc(*consumed + 1); - strncpy(result, input, *consumed); - result[*consumed] = '\0'; + value = emalloc(*consumed + 1); + strncpy(value, input, *consumed); + value[*consumed] = '\0'; *freePtr = TRUE; - return (result); + return (value); } } @@ -1775,8 +1774,8 @@ VarParseLong(const char input[], GNode * } else if (*ptr == ':') { result = ParseRestModifier(input - 2, ptr, - startc, endc, buf, - ctxt, err, consumed, freePtr); + startc, endc, buf, + ctxt, err, consumed, freePtr); Buf_Destroy(buf, TRUE); return (result); @@ -1816,29 +1815,27 @@ VarParseLong(const char input[], GNode * */ static char * VarParseShort(const char input[], GNode *ctxt, Boolean err, - size_t *consumed, Boolean *freePtr) + size_t *consumed, Boolean *freeResult) { - char name[2]; + char vname[2]; Var *v; + char *value; - name[0] = input[0]; - name[1] = '\0'; + vname[0] = input[0]; + vname[1] = '\0'; - /* consume character */ - *consumed += 1; + *consumed += 1; /* consume single letter */ - v = VarFind(name, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD); + v = VarFind(vname, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD); if (v != NULL) { - char *result; - - result = VarExpand(v, ctxt, err); + value = VarExpand(v, ctxt, err); if (v->flags & VAR_FROM_ENV) { VarDestroy(v, TRUE); } - *freePtr = TRUE; - return (result); + *freeResult = TRUE; + return (value); } /* @@ -1852,21 +1849,21 @@ VarParseShort(const char input[], GNode if ((ctxt == VAR_CMD) || (ctxt == VAR_GLOBAL)) { /* XXX: It looks like $% and $! are reversed here */ - switch (name[0]) { + switch (vname[0]) { case '@': - *freePtr = TRUE; + *freeResult = TRUE; return (estrdup("$(.TARGET)")); case '%': - *freePtr = TRUE; + *freeResult = TRUE; return (estrdup("$(.ARCHIVE)")); case '*': - *freePtr = TRUE; + *freeResult = TRUE; return (estrdup("$(.PREFIX)")); case '!': - *freePtr = TRUE; + *freeResult = TRUE; return (estrdup("$(.MEMBER)")); default: - *freePtr = FALSE; + *freeResult = FALSE; return (err ? var_Error : varNoError); } } @@ -1874,7 +1871,7 @@ VarParseShort(const char input[], GNode /* * Variable name was not found. */ - *freePtr = FALSE; + *freeResult = FALSE; return (err ? var_Error : varNoError); } @@ -1891,7 +1888,7 @@ VarParseShort(const char input[], GNode * is placed in the variable pointed to by consumed. (for * invalid specifications, this is just 2 to skip the '$' and * the following letter, or 1 if '$' was the last character - * in the string). A Boolean in *freePtr telling whether the + * in the string). A Boolean in *freeResult telling whether the * returned string should be freed by the caller. * * Side Effects: @@ -1904,26 +1901,25 @@ VarParseShort(const char input[], GNode */ char * Var_Parse(const char input[], GNode *ctxt, Boolean err, - size_t *consumed, Boolean *freePtr) + size_t *consumed, Boolean *freeResult) { /* assert(input[0] == '$'); */ - /* consume '$' */ - *consumed += 1; + *consumed += 1; /* consume '$' */ input += 1; if (input[0] == '\0') { /* Error, there is only a dollar sign in the input string. */ - *freePtr = FALSE; + *freeResult = FALSE; return (err ? var_Error : varNoError); } else if (input[0] == OPEN_PAREN || input[0] == OPEN_BRACE) { /* multi letter variable name */ - return (VarParseLong(input, ctxt, err, consumed, freePtr)); + return (VarParseLong(input, ctxt, err, consumed, freeResult)); } else { /* single letter variable name */ - return (VarParseShort(input, ctxt, err, consumed, freePtr)); + return (VarParseShort(input, ctxt, err, consumed, freeResult)); } }