Author: jmorlan Date: Thu Jul 17 11:46:09 2008 New Revision: 34566
URL: http://svn.reactos.org/svn/reactos?rev=34566&view=rev Log: Fix argument parsing for label command. It should not split the arguments by spaces; on Windows you can do 'label c:x y z' and it will set the label to X Y Z. (Bug 3530 #2)
Modified: trunk/reactos/base/shell/cmd/label.c
Modified: trunk/reactos/base/shell/cmd/label.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/label.c?rev=... ============================================================================== --- trunk/reactos/base/shell/cmd/label.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/label.c [iso-8859-1] Thu Jul 17 11:46:09 2008 @@ -29,11 +29,11 @@ TCHAR szLabel[80]; TCHAR szOldLabel[80]; DWORD dwSerialNr; - LPTSTR *arg; - INT args;
/* set empty label string */ szLabel[0] = _T('\0'); + + nErrorLevel = 0;
/* print help */ if (!_tcsncmp (param, _T("/?"), 2)) @@ -42,55 +42,34 @@ return 0; }
- nErrorLevel = 0; - /* get parameters */ - arg = split (param, &args, FALSE); - - if (args > 2) + if (param[0] != _T('\0') && param[1] == _T(':')) { - /* too many parameters */ - error_too_many_parameters (arg[args - 1]); - freep (arg); - nErrorLevel = 1; - return 1; + szRootPath[0] = toupper(*param); + param += 2; + while (_istspace(*param)) + param++; } - - if (args == 0) + else { /* get label of current drive */ TCHAR szCurPath[MAX_PATH]; GetCurrentDirectory (MAX_PATH, szCurPath); szRootPath[0] = szCurPath[0]; } - else - { - if ((_tcslen (arg[0]) >= 2) && (arg[0][1] == _T(':'))) - { - szRootPath[0] = toupper (*arg[0]); - if (args == 2) - _tcsncpy (szLabel, arg[1], 12); - } - else - { - TCHAR szCurPath[MAX_PATH]; - GetCurrentDirectory (MAX_PATH, szCurPath); - szRootPath[0] = szCurPath[0]; - _tcsncpy (szLabel, arg[0], 12); - } - } + + _tcsncpy (szLabel, param, 12);
/* check root path */ if (!IsValidPathName (szRootPath)) { error_invalid_drive (); - freep (arg); - nErrorLevel = 1; + nErrorLevel = 1; return 1; }
GetVolumeInformation(szRootPath, szOldLabel, 80, &dwSerialNr, - NULL, NULL, NULL, 0); + NULL, NULL, NULL, 0);
/* print drive info */ if (szOldLabel[0] != _T('\0')) @@ -110,7 +89,6 @@
if (szLabel[0] == _T('\0')) { - LoadString(CMD_ModuleHandle, STRING_LABEL_HELP5, szMsg, RC_STRING_MAX_SIZE); ConOutResPuts(STRING_LABEL_HELP5);
ConInString(szLabel, 80); @@ -118,8 +96,6 @@
SetVolumeLabel(szRootPath, szLabel);
- freep(arg); - return 0; }