Commit 93871906 authored by Jason Edmeades's avatar Jason Edmeades Committed by Alexandre Julliard

cmd.exe: Add support for %ERRORLEVEL% in both batch and cmd line.

parent 3bdb6414
......@@ -146,13 +146,21 @@ int i;
/* contents of fred, then the digit 1. Would need to remove */
/* ExpandEnvStrings to achieve this */
/* Replace use of %0...%9 */
/* Replace use of %0...%9 and errorlevel*/
p = cmd1;
while ((p = strchr(p, '%'))) {
i = *(p+1) - '0';
if (*(p+1) == '~') {
WCMD_HandleTildaModifiers(&p, NULL);
p++;
} else if (CompareString (LOCALE_USER_DEFAULT,
NORM_IGNORECASE | SORT_STRINGSORT,
(p+1), 11, "ERRORLEVEL%", -1) == 2) {
char output[10];
sprintf(output, "%d", errorlevel);
s = strdup (p+12);
strcpy (p, output);
strcat (p, s);
} else if ((i >= 0) && (i <= 9)) {
s = strdup (p+2);
t = WCMD_parameter (context -> command, i + context -> shift_count, NULL);
......
......@@ -301,7 +301,7 @@ int main (int argc, char *argv[])
void WCMD_process_command (char *command)
{
char *cmd, *p;
char *cmd, *p, *s;
int status, i, len;
DWORD count, creationDisposition;
HANDLE h;
......@@ -309,6 +309,25 @@ void WCMD_process_command (char *command)
SECURITY_ATTRIBUTES sa;
/*
* Replace errorlevel with current value (This shrinks in
* place and hence no need to reallocate the memory yet)
*/
p = command;
while ((p = strchr(p, '%'))) {
if (CompareString (LOCALE_USER_DEFAULT,
NORM_IGNORECASE | SORT_STRINGSORT,
(p+1), 11, "ERRORLEVEL%", -1) == 2) {
char output[10];
sprintf(output, "%d", errorlevel);
s = strdup (p+12);
strcpy (p, output);
strcat (p, s);
} else {
p++;
}
}
/*
* Expand up environment variables.
*/
len = ExpandEnvironmentStrings (command, NULL, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment