summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2005-02-28 15:01:37 +0000
committerharti <harti@FreeBSD.org>2005-02-28 15:01:37 +0000
commitb62f7499ab8c630062978fcbf970b1a65ad571f7 (patch)
treee679ef73ec6e8e37a7ccd9f2f5ef2a115e515482
parent43bead57c49b90533d72791cdb692a1b18af6387 (diff)
downloadFreeBSD-src-b62f7499ab8c630062978fcbf970b1a65ad571f7.zip
FreeBSD-src-b62f7499ab8c630062978fcbf970b1a65ad571f7.tar.gz
Don't modify the input string in VarParseLong(). It is not
necessary to NUL-terminated it, because we know the lengths from the pointers. Patch: 7.80 Submitted by: Max Okumoto <okumoto@ucsd.edu>
-rw-r--r--usr.bin/make/var.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c
index e3ff098..bd9ade8 100644
--- a/usr.bin/make/var.c
+++ b/usr.bin/make/var.c
@@ -956,7 +956,6 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
}
haveModifier = (*tstr == ':');
- *tstr = '\0'; /* modify input string */
vname = Buf_GetAll(buf, (size_t *)NULL); /* REPLACE str */
vlen = strlen(vname);
@@ -1001,7 +1000,6 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
*/
*freePtr = TRUE;
*lengthPtr = tstr - input + 1;
- *tstr = endc;
Buf_Destroy(buf, TRUE);
return (val);
}
@@ -1060,9 +1058,9 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
* No modifiers -- have specification length so we can return
* now.
*/
+ size_t rlen = tstr - input + 1;
if (dynamic) {
char *result;
- size_t rlen = tstr - input + 1;
result = emalloc(rlen + 1);
strncpy(result, input, rlen);
@@ -1070,14 +1068,12 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
*freePtr = TRUE;
*lengthPtr = rlen;
- *tstr = endc;
Buf_Destroy(buf, TRUE);
return (result);
} else {
*freePtr = FALSE;
- *lengthPtr = tstr - input + 1;
- *tstr = endc;
+ *lengthPtr = rlen;
Buf_Destroy(buf, TRUE);
return (err ? var_Error : varNoError);
@@ -1086,7 +1082,7 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
} else {
dynamic = FALSE;
}
- *freePtr = FALSE;
+
Buf_Destroy(buf, TRUE);
rw_str = VarExpand(v, ctxt, err);
@@ -1117,10 +1113,8 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
*/
if (haveModifier) {
char *cp;
- /*
- * Skip initial colon while putting it back.
- */
- *tstr++ = ':';
+
+ tstr++;
while (*tstr != endc) {
char *newStr; /* New value to return */
char termc; /* Character which terminated scan */
@@ -1639,11 +1633,8 @@ VarParseLong(char foo[], GNode *ctxt, Boolean err, size_t *lengthPtr,
}
tstr = cp;
}
- *lengthPtr = tstr - input + 1;
- } else {
- *lengthPtr = tstr - input + 1;
- *tstr = endc;
}
+ *lengthPtr = tstr - input + 1;
if (v->flags & VAR_FROM_ENV) {
if (rw_str == (char *)Buf_GetAll(v->val, (size_t *)NULL)) {
OpenPOWER on IntegriCloud