cmd: Trim whitespace in echo on/off.
This commit is contained in:
parent
3acc2068a0
commit
e8d8df3c54
|
@ -854,6 +854,35 @@ BOOL WCMD_delete (WCHAR *command) {
|
||||||
return foundAny;
|
return foundAny;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WCMD_strtrim
|
||||||
|
*
|
||||||
|
* Returns a trimmed version of s with all leading and trailing whitespace removed
|
||||||
|
* Pre: s non NULL
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static WCHAR *WCMD_strtrim(const WCHAR *s)
|
||||||
|
{
|
||||||
|
DWORD len = strlenW(s);
|
||||||
|
const WCHAR *start = s;
|
||||||
|
WCHAR* result;
|
||||||
|
|
||||||
|
if (!(result = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR))))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
while (isspaceW(*start)) start++;
|
||||||
|
if (*start) {
|
||||||
|
const WCHAR *end = s + len - 1;
|
||||||
|
while (end > start && isspaceW(*end)) end--;
|
||||||
|
memcpy(result, start, (end - start + 2) * sizeof(WCHAR));
|
||||||
|
result[end - start + 1] = '\0';
|
||||||
|
} else {
|
||||||
|
result[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* WCMD_echo
|
* WCMD_echo
|
||||||
*
|
*
|
||||||
|
@ -861,33 +890,36 @@ BOOL WCMD_delete (WCHAR *command) {
|
||||||
* in DOS (try typing "ECHO ON AGAIN" for an example).
|
* in DOS (try typing "ECHO ON AGAIN" for an example).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void WCMD_echo (const WCHAR *command) {
|
void WCMD_echo (const WCHAR *command)
|
||||||
|
{
|
||||||
int count;
|
int count;
|
||||||
const WCHAR *origcommand = command;
|
const WCHAR *origcommand = command;
|
||||||
|
WCHAR *trimmed;
|
||||||
|
|
||||||
if ( command[0]==' ' || command[0]=='\t' || command[0]=='.'
|
if ( command[0]==' ' || command[0]=='\t' || command[0]=='.'
|
||||||
|| command[0]==':' || command[0]==';')
|
|| command[0]==':' || command[0]==';')
|
||||||
command++;
|
command++;
|
||||||
|
|
||||||
count = strlenW(command);
|
trimmed = WCMD_strtrim(command);
|
||||||
|
if (!trimmed) return;
|
||||||
|
|
||||||
|
count = strlenW(trimmed);
|
||||||
if (count == 0 && origcommand[0]!='.' && origcommand[0]!=':'
|
if (count == 0 && origcommand[0]!='.' && origcommand[0]!=':'
|
||||||
&& origcommand[0]!=';') {
|
&& origcommand[0]!=';') {
|
||||||
if (echo_mode) WCMD_output (WCMD_LoadMessage(WCMD_ECHOPROMPT), onW);
|
if (echo_mode) WCMD_output (WCMD_LoadMessage(WCMD_ECHOPROMPT), onW);
|
||||||
else WCMD_output (WCMD_LoadMessage(WCMD_ECHOPROMPT), offW);
|
else WCMD_output (WCMD_LoadMessage(WCMD_ECHOPROMPT), offW);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (lstrcmpiW(command, onW) == 0) {
|
|
||||||
echo_mode = TRUE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (lstrcmpiW(command, offW) == 0) {
|
|
||||||
echo_mode = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
WCMD_output_asis (command);
|
|
||||||
WCMD_output (newline);
|
|
||||||
|
|
||||||
|
if (lstrcmpiW(trimmed, onW) == 0)
|
||||||
|
echo_mode = TRUE;
|
||||||
|
else if (lstrcmpiW(trimmed, offW) == 0)
|
||||||
|
echo_mode = FALSE;
|
||||||
|
else {
|
||||||
|
WCMD_output_asis (command);
|
||||||
|
WCMD_output (newline);
|
||||||
|
}
|
||||||
|
HeapFree(GetProcessHeap(), 0, trimmed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -26,8 +26,10 @@ echo@tab@word@tab@@space@
|
||||||
echo @tab@word
|
echo @tab@word
|
||||||
echo @tab@word
|
echo @tab@word
|
||||||
echo@tab@@tab@word
|
echo@tab@@tab@word
|
||||||
|
echo @tab@ on @space@
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
|
echo off@tab@@space@
|
||||||
echo ------------ Testing 'echo' [OFF] --------------
|
echo ------------ Testing 'echo' [OFF] --------------
|
||||||
echo word
|
echo word
|
||||||
echo 'singlequotedword'
|
echo 'singlequotedword'
|
||||||
|
|
|
@ -74,6 +74,8 @@ word
|
||||||
|
|
||||||
@pwd@>echo@tab@@tab@word@space@
|
@pwd@>echo@tab@@tab@word@space@
|
||||||
@tab@word
|
@tab@word
|
||||||
|
|
||||||
|
@pwd@>echo @tab@ on @space@@space@
|
||||||
------------ Testing 'echo' [OFF] --------------
|
------------ Testing 'echo' [OFF] --------------
|
||||||
word
|
word
|
||||||
'singlequotedword'
|
'singlequotedword'
|
||||||
|
|
Loading…
Reference in New Issue