From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/builtins.c | 28 ++++++++++++------------ programs/cmd/cmd.rc | 1 - programs/cmd/tests/test_builtins.cmd.exp | 10 ++++----- programs/cmd/wcmd.h | 3 +-- programs/cmd/wcmdmain.c | 2 +- 5 files changed, 21 insertions(+), 23 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index a1cc66b8613..7d5c30407c3 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -3283,27 +3283,27 @@ void WCMD_setshow_env (WCHAR *s) { * Set/Show the path environment variable */
-void WCMD_setshow_path (const WCHAR *args) { - +RETURN_CODE WCMD_setshow_path(const WCHAR *args) +{ WCHAR string[1024]; - DWORD status;
if (!*param1 && !*param2) { - status = GetEnvironmentVariableW(L"PATH", string, ARRAY_SIZE(string)); - if (status != 0) { - WCMD_output_asis(L"PATH="); - WCMD_output_asis ( string); - WCMD_output_asis(L"\r\n"); - } - else { - WCMD_output_stderr(WCMD_LoadMessage(WCMD_NOPATH)); - } + if (!GetEnvironmentVariableW(L"PATH", string, ARRAY_SIZE(string))) + wcscpy(string, L"(null)"); + WCMD_output_asis(L"PATH="); + WCMD_output_asis(string); + WCMD_output_asis(L"\r\n"); } else { if (*args == '=') args++; /* Skip leading '=' */ - status = SetEnvironmentVariableW(L"PATH", args); - if (!status) WCMD_print_error(); + if (args[0] == L';' && *WCMD_skip_leading_spaces((WCHAR *)(args + 1)) == L'\0') args = NULL; + if (!SetEnvironmentVariableW(L"PATH", args)) + { + WCMD_print_error(); + return errorlevel = ERROR_INVALID_FUNCTION; + } } + return errorlevel = NO_ERROR; }
/**************************************************************************** diff --git a/programs/cmd/cmd.rc b/programs/cmd/cmd.rc index 9e66f27380d..3beb9c62a89 100644 --- a/programs/cmd/cmd.rc +++ b/programs/cmd/cmd.rc @@ -390,7 +390,6 @@ Enter HELP <command> for further information on any of the above commands.\n" WCMD_ARGERR, "Parameter error\n" WCMD_VOLUMESERIALNO, "Volume Serial Number is %1!04x!-%2!04x!\n\n" WCMD_VOLUMEPROMPT, "Volume label (11 characters, <Enter> for none)?" - WCMD_NOPATH, "PATH not found\n" WCMD_ANYKEY,"Press any key to continue... " WCMD_CONSTITLE,"Wine Command Prompt" WCMD_VERSION,"Microsoft Windows %1!S!\n" diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index bc6c7fcb9b2..9131b8d4ef5 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -566,12 +566,12 @@ FAILURE 1 --- success/failure for LABEL command FAILURE 1 --- success/failure for PATH command -@todo_wine@SUCCESS 0 -@todo_wine@SUCCESS 0 +SUCCESS 0 +SUCCESS 0 PATH=@:\I\dont\Exist@space@ -@todo_wine@SUCCESS 0 -@todo_wine@PATH=(null) -@todo_wine@SUCCESS 0 +SUCCESS 0 +PATH=(null) +SUCCESS 0 --- success/failure for SET command @todo_wine@SUCCESS 0 SUCCESS 0 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 433067f6b29..d5777e8f153 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -199,7 +199,7 @@ RETURN_CODE WCMD_setlocal(WCHAR *args); RETURN_CODE WCMD_setshow_date(void); RETURN_CODE WCMD_setshow_default(const WCHAR *args); void WCMD_setshow_env (WCHAR *command); -void WCMD_setshow_path (const WCHAR *args); +RETURN_CODE WCMD_setshow_path(const WCHAR *args); void WCMD_setshow_prompt (void); RETURN_CODE WCMD_setshow_time(void); void WCMD_shift (const WCHAR *args); @@ -438,7 +438,6 @@ extern WCHAR version_string[]; #define WCMD_ARGERR 1027 #define WCMD_VOLUMESERIALNO 1028 #define WCMD_VOLUMEPROMPT 1029 -#define WCMD_NOPATH 1030 #define WCMD_ANYKEY 1031 #define WCMD_CONSTITLE 1032 #define WCMD_VERSION 1033 diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 353e955b123..afc2eb3b531 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1859,7 +1859,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) return_code = WCMD_move(); break; case WCMD_PATH: - WCMD_setshow_path (parms_start); + return_code = WCMD_setshow_path(parms_start); break; case WCMD_PAUSE: WCMD_pause ();