mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 19:55:41 +00:00
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:
parent
821c381455
commit
817d837921
1 changed files with 11 additions and 4 deletions
|
@ -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 );
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue