From: YeshunYe <yeyeshun@uniontech.com> The parameter of the 'pushd' command may contain the character ‘/’, which is compatible with Windows. Signed-off-by: YeshunYe <yeyeshun@uniontech.com> --- programs/cmd/builtins.c | 10 +++++----- programs/cmd/wcmd.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 7d1ad5c1e15..447ddacc9f8 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1774,19 +1774,19 @@ RETURN_CODE WCMD_goto(void) * Push a directory onto the stack */ -RETURN_CODE WCMD_pushd(const WCHAR *args) +RETURN_CODE WCMD_pushd(WCHAR *args) { struct env_stack *curdir; WCHAR *thisdir; RETURN_CODE return_code; + WCHAR *backslask; if (!*args) return errorlevel = NO_ERROR; - if (wcschr(args, '/') != NULL) { - SetLastError(ERROR_INVALID_PARAMETER); - WCMD_print_error(); - return errorlevel = ERROR_INVALID_FUNCTION; + while ((backslask = wcschr(args, '/'))) + { + *backslask = '\\'; } curdir = xalloc(sizeof(struct env_stack)); diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index c8d0d03e9e6..ee11d83c920 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -193,7 +193,7 @@ RETURN_CODE WCMD_output_asis_stderr(const WCHAR *message); RETURN_CODE WCMD_pause(void); RETURN_CODE WCMD_popd(void); void WCMD_print_error (void); -RETURN_CODE WCMD_pushd(const WCHAR *args); +RETURN_CODE WCMD_pushd(WCHAR *args); RETURN_CODE WCMD_remove_dir(WCHAR *command); RETURN_CODE WCMD_rename(void); RETURN_CODE WCMD_setlocal(WCHAR *args); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9881