- Fixed the parameter check of the echo command.
- Remove the first space after the echo command.
- Do never check for parameters if the delimiter is a point.
Modified: trunk/reactos/subsys/system/cmd/echo.c
_____
Modified: trunk/reactos/subsys/system/cmd/echo.c
--- trunk/reactos/subsys/system/cmd/echo.c 2005-11-22 14:23:17 UTC
(rev 19466)
+++ trunk/reactos/subsys/system/cmd/echo.c 2005-11-22 18:01:02 UTC
(rev 19467)
@@ -33,44 +33,70 @@
INT CommandEcho (LPTSTR cmd, LPTSTR param)
{
TCHAR szMsg[RC_STRING_MAX_SIZE];
- UINT i = 0;
+ LPTSTR p1, p2;
#ifdef _DEBUG
DebugPrintf (_T("CommandEcho '%s' : '%s'\n"), cmd, param);
#endif
- if (!_tcsncmp (param, _T("/?"), 2))
+ if (_tcsicmp (cmd, _T("echo.")) == 0)
{
- ConOutResPaging(TRUE,STRING_ECHO_HELP4);
- return 0;
- }
-
- if (_tcsicmp (cmd, _T("echo.")) == 0)
- {
if (param[0] == 0)
ConOutChar (_T('\n'));
else
ConOutPuts (param);
}
- else
- {
- if (_tcsicmp (param, D_OFF) == 0)
- bEcho = FALSE;
- else if (_tcsicmp (param, D_ON) == 0)
- bEcho = TRUE;
- else if (*param)
+ else
+ {
+ /* skip the first delimiter */
+ if (_istspace(*param))
+ param++;
+
+ /* skip all spaces for the check of '/?', 'ON' and
'OFF' */
+ p1 = param;
+ while(_istspace(*p1))
+ p1++;
+
+ if (!_tcsncmp (p1, _T("/?"), 2))
+ {
+ ConOutResPaging(TRUE,STRING_ECHO_HELP4);
+ return 0;
+ }
+
+ if (_tcsnicmp (p1, D_OFF, sizeof(D_OFF)/sizeof(TCHAR) -
1) == 0)
+ {
+ p2 = p1 + sizeof(D_OFF)/sizeof(TCHAR) - 1;
+ while (_istspace(*p2))
+ p2++;
+ if (*p2 == _T('\0'))
+ {
+ bEcho = FALSE;
+ return 0;
+ }
+ }
+ else if (_tcsnicmp (p1, D_ON, sizeof(D_ON)/sizeof(TCHAR)
- 1) == 0)
+ {
+ p2 = p1 + sizeof(D_ON)/sizeof(TCHAR) - 1;
+ while (_istspace(*p2))
+ p2++;
+ if (*p2 == _T('\0'))
+ {
+ bEcho = TRUE;
+ return 0;
+ }
+ }
+ if (*p1 != _T('\0'))
{
- while(i < _tcslen(param))
- {
- if(param[i] == _T('^'))
- {
- memmove(¶m[i],¶m[i + 1],
_tcslen(¶m[i]) * sizeof(TCHAR));
- //skip past the char being
escaped
- i++;
- }
- else
- i++;
- }
+ p1 = param;
+ while (NULL != (p1 = _tcschr(p1, _T('^'))))
+ {
+ memmove(p1, p1 + 1, (_tcslen(p1 + 1) +
1) * sizeof(TCHAR));
+ if (*p1)
+ {
+ //skip past the char being
escaped
+ p1++;
+ }
+ }
ConOutPuts (param);
}
else
Show replies by date