From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/builtins.c | 12 +++++++----- programs/cmd/tests/test_builtins.cmd.exp | 8 ++++---- programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 2238995b53c..ac26896f0a8 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -3867,8 +3867,8 @@ RETURN_CODE WCMD_exit(void) * Lists or sets file associations (assoc = TRUE) * Lists or sets file types (assoc = FALSE) */ -void WCMD_assoc (const WCHAR *args, BOOL assoc) { - +RETURN_CODE WCMD_assoc(const WCHAR *args, BOOL assoc) +{ HKEY key; DWORD accessOptions = KEY_READ; WCHAR *newValue; @@ -3885,7 +3885,7 @@ void WCMD_assoc (const WCHAR *args, BOOL assoc) { /* Open a key to HKEY_CLASSES_ROOT for enumerating */ if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"", 0, accessOptions, &key) != ERROR_SUCCESS) { WINE_FIXME("Unexpected failure opening HKCR key: %ld\n", GetLastError()); - return; + return ERROR_INVALID_FUNCTION; }
/* If no parameters then list all associations */ @@ -3955,7 +3955,7 @@ void WCMD_assoc (const WCHAR *args, BOOL assoc) { if (rc == ERROR_SUCCESS) WCMD_output_asis(keyValue); WCMD_output_asis(L"\r\n"); RegCloseKey(readKey); - + errorlevel = rc == ERROR_SUCCESS ? NO_ERROR : ERROR_INVALID_FUNCTION; } else { WCHAR msgbuffer[MAXSTRING];
@@ -3966,7 +3966,7 @@ void WCMD_assoc (const WCHAR *args, BOOL assoc) { LoadStringW(hinst, WCMD_NOFTYPE, msgbuffer, ARRAY_SIZE(msgbuffer)); } WCMD_output_stderr(msgbuffer, keyValue); - errorlevel = ERROR_FILE_NOT_FOUND; + errorlevel = assoc ? ERROR_INVALID_FUNCTION : ERROR_FILE_NOT_FOUND; }
/* Not a query - it's a set or clear of a value */ @@ -4032,6 +4032,8 @@ void WCMD_assoc (const WCHAR *args, BOOL assoc) {
/* Clean up */ RegCloseKey(key); + + return errorlevel; }
/**************************************************************************** diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 8d6025f7c54..0cff90d83be 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -582,12 +582,12 @@ FAILURE 1 FAILURE 1 --- success/failure for ASSOC command SUCCESS 0 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 +FAILURE 1 +FAILURE 1 --- success/failure for FTYPE command SUCCESS 0 -@todo_wine@FAILURE 2 -@todo_wine@FAILURE 2 +FAILURE 2 +FAILURE 2 --- success/failure for SHIFT command @todo_wine@FAILURE 1 SUCCESS 666 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 2282c9f5d9c..79ef2bb65a7 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -161,7 +161,7 @@ typedef int RETURN_CODE;
BOOL WCMD_print_volume_information(const WCHAR *);
-void WCMD_assoc (const WCHAR *, BOOL); +RETURN_CODE WCMD_assoc(const WCHAR *, BOOL); RETURN_CODE WCMD_batch(const WCHAR *, WCHAR *, const WCHAR *, HANDLE); RETURN_CODE WCMD_call(WCHAR *command); void WCMD_change_tty (void); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index e3ec39d65ed..6212dacf7e7 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1918,13 +1918,13 @@ static RETURN_CODE execute_single_command(const WCHAR *command) return_code = WCMD_popd(); break; case WCMD_ASSOC: - WCMD_assoc(parms_start, TRUE); + return_code = WCMD_assoc(parms_start, TRUE); break; case WCMD_COLOR: WCMD_color(); break; case WCMD_FTYPE: - WCMD_assoc(parms_start, FALSE); + return_code = WCMD_assoc(parms_start, FALSE); break; case WCMD_MORE: WCMD_more(parms_start);