From: Eric Pouech epouech@codeweavers.com
And finish the separation for LABEL & VOLUME commands entry points.
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/builtins.c | 82 +++++++++++------------- programs/cmd/tests/test_builtins.cmd.exp | 4 +- programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 2 +- 4 files changed, 41 insertions(+), 49 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 09d6ce631b8..1008802b12e 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -3756,64 +3756,56 @@ BOOL WCMD_print_volume_information(const WCHAR *path) }
/**************************************************************************** - * WCMD_volume + * WCMD_label * - * Display volume information (set_label = FALSE) - * Additionally set volume label (set_label = TRUE) - * Returns 1 on success, 0 otherwise + * Set volume label */
-int WCMD_old_volume(BOOL set_label, const WCHAR *path) +RETURN_CODE WCMD_label(void) { - DWORD count, serial; - WCHAR string[MAX_PATH], label[MAX_PATH], curdir[MAX_PATH]; - BOOL status; + DWORD count; + WCHAR string[MAX_PATH], curdir[MAX_PATH];
- if (!*path) { - status = GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir); - if (!status) { - WCMD_print_error (); - return 0; + /* FIXME incomplete implementation: + * - no support for /MP qualifier, + * - no support for passing label as parameter + */ + if (*quals) + return errorlevel = ERROR_INVALID_FUNCTION; + if (!*param1) { + if (!GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir)) { + WCMD_print_error(); + return errorlevel = ERROR_INVALID_FUNCTION; } - status = GetVolumeInformationW(NULL, label, ARRAY_SIZE(label), &serial, NULL, NULL, NULL, 0); } - else { - if ((path[1] != ':') || (lstrlenW(path) != 2)) { + else if (param1[1] == ':' && !param1[2]) { + curdir[0] = param1[0]; + curdir[1] = param1[1]; + } else { WCMD_output_stderr(WCMD_LoadMessage(WCMD_SYNTAXERR)); - return 0; - } - wsprintfW (curdir, L"%s\", path); - status = GetVolumeInformationW(curdir, label, ARRAY_SIZE(label), &serial, NULL, NULL, NULL, 0); - } - if (!status) { - WCMD_print_error (); - return 0; + return errorlevel = ERROR_INVALID_FUNCTION; } - if (label[0] != '\0') { - WCMD_output (WCMD_LoadMessage(WCMD_VOLUMELABEL), - curdir[0], label); + curdir[2] = L'\'; + curdir[3] = L'\0'; + if (!WCMD_print_volume_information(curdir)) { + WCMD_print_error(); + return errorlevel = ERROR_INVALID_FUNCTION; } - else { - WCMD_output (WCMD_LoadMessage(WCMD_VOLUMENOLABEL), - curdir[0]); + + if (WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), string, ARRAY_SIZE(string), &count) && + count > 1) { + string[count-1] = '\0'; /* ReadFile output is not null-terminatrred! */ + if (string[count-2] == '\r') string[count-2] = '\0'; /* Under Windoze we get CRLF! */ } - WCMD_output (WCMD_LoadMessage(WCMD_VOLUMESERIALNO), - HIWORD(serial), LOWORD(serial)); - if (set_label) { - WCMD_output (WCMD_LoadMessage(WCMD_VOLUMEPROMPT)); - if (WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), string, ARRAY_SIZE(string), &count) && - count > 1) { - string[count-1] = '\0'; /* ReadFile output is not null-terminated! */ - if (string[count-2] == '\r') string[count-2] = '\0'; /* Under Windoze we get CRLF! */ - } - if (*path) { - if (!SetVolumeLabelW(curdir, string)) WCMD_print_error (); - } - else { - if (!SetVolumeLabelW(NULL, string)) WCMD_print_error (); + if (*param1) { + if (!SetVolumeLabelW(curdir, string)) + { + errorlevel = GetLastError(); + WCMD_print_error(); + return errorlevel; } } - return 1; + return errorlevel = NO_ERROR; }
RETURN_CODE WCMD_volume(void) diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 6358d35ca49..1f52ec722b7 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -564,8 +564,8 @@ SUCCESS 0 FAILURE 1 FAILURE 1 --- success/failure for LABEL command -@todo_wine@FAILURE 1 -@todo_wine@--- +FAILURE 1 +--- ------------ Testing 'set' ------------ 1 0 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 3c1ebf0a2f0..433067f6b29 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -179,6 +179,7 @@ RETURN_CODE WCMD_exit(void); BOOL WCMD_get_fullpath(const WCHAR *, SIZE_T, WCHAR *, WCHAR **); void WCMD_give_help (const WCHAR *args); RETURN_CODE WCMD_goto(void); +RETURN_CODE WCMD_label(void); void WCMD_leave_paged_mode(void); void WCMD_more (WCHAR *); RETURN_CODE WCMD_move (void); @@ -208,7 +209,6 @@ RETURN_CODE WCMD_type(WCHAR *); RETURN_CODE WCMD_verify(void); RETURN_CODE WCMD_version(void); RETURN_CODE WCMD_volume(void); -int WCMD_old_volume (BOOL set_label, const WCHAR *args); void WCMD_mklink(WCHAR *args);
WCHAR *WCMD_fgets (WCHAR *buf, DWORD n, HANDLE stream); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 24da1d3630a..353e955b123 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1849,7 +1849,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) WCMD_give_help (parms_start); break; case WCMD_LABEL: - WCMD_old_volume (TRUE, parms_start); + return_code = WCMD_label(); break; case WCMD_MD: case WCMD_MKDIR: