Module: wine Branch: master Commit: cd331dd3a47bdcd7e53f95fb52628db3cf05d5af URL: https://gitlab.winehq.org/wine/wine/-/commit/cd331dd3a47bdcd7e53f95fb52628db...
Author: Eric Pouech epouech@codeweavers.com Date: Mon Jul 1 14:44:44 2024 +0200
cmd: Set success/failure return code for MKLINK command.
Signed-off-by: Eric Pouech epouech@codeweavers.com
---
programs/cmd/builtins.c | 35 ++++++++++++++++++-------------- programs/cmd/tests/test_builtins.cmd.exp | 14 ++++++------- programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 2 +- 4 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index d1be9aab967..869c3d9d088 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -4088,7 +4088,7 @@ RETURN_CODE WCMD_color(void) * WCMD_mklink */
-void WCMD_mklink(WCHAR *args) +RETURN_CODE WCMD_mklink(WCHAR *args) { int argno = 0; WCHAR *argN = args; @@ -4099,11 +4099,6 @@ void WCMD_mklink(WCHAR *args) WCHAR file1[MAX_PATH]; WCHAR file2[MAX_PATH];
- if (param1[0] == 0x00 || param2[0] == 0x00) { - WCMD_output_stderr(WCMD_LoadMessage(WCMD_NOARG)); - return; - } - file1[0] = 0;
while (argN) { @@ -4119,7 +4114,12 @@ void WCMD_mklink(WCHAR *args) hard = TRUE; else if (lstrcmpiW(thisArg, L"/J") == 0) junction = TRUE; - else { + else if (*thisArg == L'/') + { + return errorlevel = ERROR_INVALID_FUNCTION; + } + else + { if(!file1[0]) lstrcpyW(file1, thisArg); else @@ -4127,13 +4127,18 @@ void WCMD_mklink(WCHAR *args) } }
- if(hard) - ret = CreateHardLinkW(file1, file2, NULL); - else if(!junction) - ret = CreateSymbolicLinkW(file1, file2, isdir); - else - WINE_TRACE("Juction links currently not supported.\n"); + if (*file1 && *file2) + { + if (hard) + ret = CreateHardLinkW(file1, file2, NULL); + else if(!junction) + ret = CreateSymbolicLinkW(file1, file2, isdir); + else + TRACE("Junction links currently not supported.\n"); + } + + if (ret) return errorlevel = NO_ERROR;
- if(!ret) - WCMD_output_stderr(WCMD_LoadMessage(WCMD_READFAIL), file1); + WCMD_output_stderr(WCMD_LoadMessage(WCMD_READFAIL), file1); + return errorlevel = ERROR_INVALID_FUNCTION; } diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index ed0e7d8d1e3..d028c3fe1e6 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -558,13 +558,13 @@ ERRORLEVEL 666 ERRORLEVEL 666 ERRORLEVEL 666 --- success/failure for MKLINK command -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@SUCCESS 0 -@todo_wine@FAILURE 1 +FAILURE 1 +FAILURE 1 +FAILURE 1 +FAILURE 1 +FAILURE 1 +SUCCESS 0 +FAILURE 1 --- success/failure for SETLOCAL/ENDLOCAL commands FAILURE 1 SUCCESS 0 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 5a54fc5e925..a727a651516 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -208,7 +208,7 @@ RETURN_CODE WCMD_type(WCHAR *); RETURN_CODE WCMD_verify(void); RETURN_CODE WCMD_version(void); RETURN_CODE WCMD_volume(void); -void WCMD_mklink(WCHAR *args); +RETURN_CODE WCMD_mklink(WCHAR *args);
WCHAR *WCMD_fgets (WCHAR *buf, DWORD n, HANDLE stream); WCHAR *WCMD_parameter (WCHAR *s, int n, WCHAR **start, BOOL raw, BOOL wholecmdline); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 505d816eabb..2826f9a609a 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1928,7 +1928,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) return_code = WCMD_choice(parms_start); break; case WCMD_MKLINK: - WCMD_mklink(parms_start); + return_code = WCMD_mklink(parms_start); break; case WCMD_EXIT: return_code = WCMD_exit();