1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-15 10:17:20 +00:00

Fix a bug introduced in a previous commit: ParseModifier() consumes

characters so it is not safe to move around code from
before it to after it. This should fix problems with building the
documentation.

Patch:		7.170

Submitted by:	Max Okumoto <okumoto@ucsd.edu>
This commit is contained in:
Hartmut Brandt 2005-03-30 15:14:22 +00:00
parent 4d2743aec5
commit f43eb6f83b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=144340

View File

@ -1304,8 +1304,20 @@ ParseRestModifier(VarParser *vp, char startc, Buffer *buf, Boolean *freeResult)
}
if ((vp->ctxt == VAR_CMD) || (vp->ctxt == VAR_GLOBAL)) {
size_t consumed = vp->ptr - vp->input + 1;
size_t consumed;
/*
* Still need to get to the end of the variable
* specification, so kludge up a Var structure for the
* modifications
*/
v = VarCreate(vname, NULL, VAR_JUNK);
value = ParseModifier(vp, startc, v, freeResult);
if (*freeResult) {
free(value);
}
VarDestroy(v, TRUE);
consumed = vp->ptr - vp->input + 1;
/*
* If substituting a local variable in a non-local context,
* assume it's for dynamic source stuff. We have to handle
@ -1341,6 +1353,9 @@ ParseRestModifier(VarParser *vp, char startc, Buffer *buf, Boolean *freeResult)
return (value);
}
}
*freeResult = FALSE;
return (vp->err ? var_Error : varNoError);
} else {
/*
* Check for D and F forms of local variables since we're in
@ -1360,22 +1375,22 @@ ParseRestModifier(VarParser *vp, char startc, Buffer *buf, Boolean *freeResult)
return (value);
}
}
}
/*
* Still need to get to the end of the variable
* specification, so kludge up a Var structure for the
* modifications
*/
v = VarCreate(vname, NULL, VAR_JUNK);
value = ParseModifier(vp, startc, v, freeResult);
if (*freeResult) {
free(value);
}
VarDestroy(v, TRUE);
/*
* Still need to get to the end of the variable
* specification, so kludge up a Var structure for the
* modifications
*/
v = VarCreate(vname, NULL, VAR_JUNK);
value = ParseModifier(vp, startc, v, freeResult);
if (*freeResult) {
free(value);
}
VarDestroy(v, TRUE);
*freeResult = FALSE;
return (vp->err ? var_Error : varNoError);
*freeResult = FALSE;
return (vp->err ? var_Error : varNoError);
}
}
static char *