fix a problem with length calculation

handle vars with exclamation marks instead of %
like !errorlevel!

svn path=/trunk/; revision=32078
This commit is contained in:
Christoph von Wittich 2008-02-01 21:25:21 +00:00
parent 821c381455
commit 817d837921

View file

@ -1186,7 +1186,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName )
if (i > 0) if (i > 0)
{ {
if (StringPart[1] < 0) if (StringPart[1] < 0)
StringPart[1] = _tcslen(ret + StringPart[0]) + StringPart[1]; StringPart[1] = _tcslen(ret + StringPart[0]) - 1 + StringPart[1];
_tcsncpy(ReturnValue, ret + StringPart[0], StringPart[1]); _tcsncpy(ReturnValue, ret + StringPart[0], StringPart[1]);
_tcscpy(ret, ReturnValue); _tcscpy(ret, ReturnValue);
} }
@ -1285,12 +1285,19 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA )
static UINT retlen = 0; static UINT retlen = 0;
LPTSTR p, tmp; LPTSTR p, tmp;
UINT size; UINT size;
TCHAR c;
if ( varNameLen ) if ( varNameLen )
*varNameLen = 0; *varNameLen = 0;
SetLastError(0); SetLastError(0);
if ( *varName++ != '%' ) c = *varName;
if ( (*varName != '!') && (*varName++ != '%') )
return NULL; return NULL;
if (c == _T('!'))
varName++;
switch ( *varName ) switch ( *varName )
{ {
case _T('~'): case _T('~'):
@ -1388,7 +1395,7 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA )
*varNameLen = 1; *varNameLen = 1;
return ret; return ret;
} }
p = _tcschr ( varName, _T('%') ); p = _tcschr ( varName, c );
if ( !p ) if ( !p )
{ {
SetLastError ( ERROR_INVALID_PARAMETER ); SetLastError ( ERROR_INVALID_PARAMETER );
@ -1448,7 +1455,7 @@ ProcessInput (BOOL bFlag)
bModeSetA = FALSE; bModeSetA = FALSE;
while (*ip) while (*ip)
{ {
if ( *ip == _T('%') ) if ( (*ip == _T('%')) || (*ip == _T('!')) )
{ {
UINT envNameLen; UINT envNameLen;
LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA ); LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA );