From 817d837921743ce5b7d5bef9719780ebfe27ecb9 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Fri, 1 Feb 2008 21:25:21 +0000 Subject: [PATCH] fix a problem with length calculation handle vars with exclamation marks instead of % like !errorlevel! svn path=/trunk/; revision=32078 --- reactos/base/shell/cmd/cmd.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/reactos/base/shell/cmd/cmd.c b/reactos/base/shell/cmd/cmd.c index 304e45fe73c..56a5623a20f 100644 --- a/reactos/base/shell/cmd/cmd.c +++ b/reactos/base/shell/cmd/cmd.c @@ -1186,7 +1186,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) if (i > 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]); _tcscpy(ret, ReturnValue); } @@ -1285,12 +1285,19 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) static UINT retlen = 0; LPTSTR p, tmp; UINT size; + TCHAR c; if ( varNameLen ) *varNameLen = 0; SetLastError(0); - if ( *varName++ != '%' ) + c = *varName; + + if ( (*varName != '!') && (*varName++ != '%') ) return NULL; + + if (c == _T('!')) + varName++; + switch ( *varName ) { case _T('~'): @@ -1388,7 +1395,7 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) *varNameLen = 1; return ret; } - p = _tcschr ( varName, _T('%') ); + p = _tcschr ( varName, c ); if ( !p ) { SetLastError ( ERROR_INVALID_PARAMETER ); @@ -1448,7 +1455,7 @@ ProcessInput (BOOL bFlag) bModeSetA = FALSE; while (*ip) { - if ( *ip == _T('%') ) + if ( (*ip == _T('%')) || (*ip == _T('!')) ) { UINT envNameLen; LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA );