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; ...@@ -146,13 +146,21 @@ int i;
/* contents of fred, then the digit 1. Would need to remove */ /* contents of fred, then the digit 1. Would need to remove */
/* ExpandEnvStrings to achieve this */ /* ExpandEnvStrings to achieve this */
/* Replace use of %0...%9 */ /* Replace use of %0...%9 and errorlevel*/
p = cmd1; p = cmd1;
while ((p = strchr(p, '%'))) { while ((p = strchr(p, '%'))) {
i = *(p+1) - '0'; i = *(p+1) - '0';
if (*(p+1) == '~') { if (*(p+1) == '~') {
WCMD_HandleTildaModifiers(&p, NULL); WCMD_HandleTildaModifiers(&p, NULL);
p++; 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)) { } else if ((i >= 0) && (i <= 9)) {
s = strdup (p+2); s = strdup (p+2);
t = WCMD_parameter (context -> command, i + context -> shift_count, NULL); t = WCMD_parameter (context -> command, i + context -> shift_count, NULL);
......
...@@ -301,7 +301,7 @@ int main (int argc, char *argv[]) ...@@ -301,7 +301,7 @@ int main (int argc, char *argv[])
void WCMD_process_command (char *command) void WCMD_process_command (char *command)
{ {
char *cmd, *p; char *cmd, *p, *s;
int status, i, len; int status, i, len;
DWORD count, creationDisposition; DWORD count, creationDisposition;
HANDLE h; HANDLE h;
...@@ -309,6 +309,25 @@ void WCMD_process_command (char *command) ...@@ -309,6 +309,25 @@ void WCMD_process_command (char *command)
SECURITY_ATTRIBUTES sa; 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. * Expand up environment variables.
*/ */
len = ExpandEnvironmentStrings (command, NULL, 0); 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