diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 5ccbb8fecdd25388d2ffa27197f309496b9409f0..8c3f727f9646d1890daf7a3cc73b56d96d5ca4c2 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1150,6 +1150,7 @@ void WCMD_give_help (WCHAR *command) { void WCMD_goto (CMD_LIST **cmdList) { WCHAR string[MAX_PATH]; + WCHAR current[MAX_PATH]; /* Do not process any more parts of a processed multipart or multilines command */ if (cmdList) *cmdList = NULL; @@ -1174,8 +1175,17 @@ void WCMD_goto (CMD_LIST **cmdList) { SetFilePointer (context -> h, 0, NULL, FILE_BEGIN); while (WCMD_fgets (string, sizeof(string)/sizeof(WCHAR), context -> h)) { str = string; - while (isspaceW(*str)) str++; - if ((*str == ':') && (lstrcmpiW (++str, paramStart) == 0)) return; + while (isspaceW (*str)) str++; + if (*str == ':') { + DWORD index = 0; + str++; + while (((current[index] = str[index])) && (!isspaceW (current[index]))) + index++; + + /* ignore space at the end */ + current[index] = 0; + if (lstrcmpiW (current, paramStart) == 0) return; + } } WCMD_output (WCMD_LoadMessage(WCMD_NOTARGET)); } diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index 375b7a135d5b84882c9b307f932dbc5e39d9054f..2b117e4445bdf5522983c653fbcb8f7e1ae36513 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -88,3 +88,6 @@ echo goto with a leading space worked if c==c goto dest3 :dest3 echo goto with a leading tab worked +if d==d goto dest4 +:dest4@space@ +echo goto with a following space worked diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index dee2c5b9ed9de632575d59eaba237b9e1cf40f02..e4644d31fbe604750778e9f1fa5662096afaae1a 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -82,3 +82,4 @@ if /I seems to work goto with no leading space worked goto with a leading space worked goto with a leading tab worked +goto with a following space worked