(hopefully) last bugfix to set /a - assignment works again
Modified: trunk/reactos/subsys/system/cmd/set.c
_____
Modified: trunk/reactos/subsys/system/cmd/set.c
--- trunk/reactos/subsys/system/cmd/set.c 2005-09-18 17:33:11 UTC
(rev 17915)
+++ trunk/reactos/subsys/system/cmd/set.c 2005-09-18 17:52:28 UTC
(rev 17916)
@@ -408,36 +408,22 @@
if ( identlen )
{
if ( *p == _T('=') )
- op = *p, p++;
+ op = *p, p = skip_ws(p+1);
else if ( _tcschr ( _T("*/%+-&^|"), *p ) && p[1] ==
_T('=') )
- op = *p, p += 2;
+ op = *p, p = skip_ws(p+2);
else if ( _tcschr ( _T("<>"), *p ) && *p == p[1] &&
p[2]
== _T('=') )
- op = *p, p += 3;
- else
- {
- _tprintf ( _T("Missing operand.\n") );
- return FALSE;
- }
- p = skip_ws ( p );
+ op = *p, p = skip_ws(p+3);
}
/* allow to chain multiple assignments, such as: a=b=1 */
if ( ident && op )
{
- if ( !seta_assignment ( &p, &exprval ) )
- return FALSE;
- }
- else
- {
- if ( !seta_expr ( &p, &exprval ) )
- return FALSE;
- }
-
- if ( identlen )
- {
INT identval;
LPTSTR buf;
+ if ( !seta_assignment ( &p, &exprval ) )
+ return FALSE;
+
if ( !seta_identval ( ident, &identval ) )
identval = 0;
switch ( op )
@@ -460,6 +446,13 @@
SetEnvironmentVariable ( ident, buf ); // TODO FIXME -
check return value
exprval = identval;
}
+ else
+ {
+ /* restore p in case we found an ident but not an op */
+ p = *p_;
+ if ( !seta_expr ( &p, &exprval ) )
+ return FALSE;
+ }
*result = exprval;
*p_ = p;