[PATCH 4/4] cmd: Use wide-char string literals.

Michael Stefaniuc mstefani at winehq.org
Sun Nov 29 16:30:30 CST 2020


Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
 programs/cmd/directory.c |  21 +++----
 programs/cmd/wcmdmain.c  | 116 +++++++++++++--------------------------
 2 files changed, 46 insertions(+), 91 deletions(-)

diff --git a/programs/cmd/directory.c b/programs/cmd/directory.c
index df3ed4387ee..24b18bfa81b 100644
--- a/programs/cmd/directory.c
+++ b/programs/cmd/directory.c
@@ -252,11 +252,6 @@ static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int le
   int concurrentDirs = 0;
   BOOL done_header = FALSE;
 
-  static const WCHAR fmt2[]  = {'%','1','!','-','1','3','s','!','\0'};
-  static const WCHAR fmt3[]  = {'%','1','!','-','2','3','s','!','\0'};
-  static const WCHAR fmt4[]  = {'%','1','\0'};
-  static const WCHAR fmt5[]  = {'%','1','%','2','\0'};
-
   dir_count = 0;
   file_count = 0;
   entry_count = 0;
@@ -405,13 +400,13 @@ static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int le
 
         if (!bare) {
            WCMD_output (L"%1!10s!  %2!8s!  <DIR>         ", datestring, timestring);
-           if (shortname) WCMD_output (fmt2, fd[i].cAlternateFileName);
-           if (usernames) WCMD_output (fmt3, username);
-           WCMD_output(fmt4,fd[i].cFileName);
+           if (shortname) WCMD_output(L"%1!-13s!", fd[i].cAlternateFileName);
+           if (usernames) WCMD_output(L"%1!-23s!", username);
+           WCMD_output(L"%1",fd[i].cFileName);
         } else {
            if (!((lstrcmpW(fd[i].cFileName, L".") == 0) ||
                  (lstrcmpW(fd[i].cFileName, L"..") == 0))) {
-              WCMD_output(fmt5, recurse?inputparms->dirName:L"", fd[i].cFileName);
+              WCMD_output(L"%1%2", recurse ? inputparms->dirName : L"", fd[i].cFileName);
            } else {
               addNewLine = FALSE;
            }
@@ -425,11 +420,11 @@ static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int le
         if (!bare) {
            WCMD_output (L"%1!10s!  %2!8s!    %3!10s!  ", datestring, timestring,
                         WCMD_filesize64(file_size.QuadPart));
-           if (shortname) WCMD_output (fmt2, fd[i].cAlternateFileName);
-           if (usernames) WCMD_output (fmt3, username);
-           WCMD_output(fmt4,fd[i].cFileName);
+           if (shortname) WCMD_output(L"%1!-13s!", fd[i].cAlternateFileName);
+           if (usernames) WCMD_output(L"%1!-23s!", username);
+           WCMD_output(L"%1",fd[i].cFileName);
         } else {
-           WCMD_output(fmt5, recurse ? inputparms->dirName : L"", fd[i].cFileName);
+           WCMD_output(L"%1%2", recurse ? inputparms->dirName : L"", fd[i].cFileName);
         }
       }
      }
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 3484f05ae73..cacb7ea7751 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -46,11 +46,6 @@ int defaultColor = 7;
 BOOL echo_mode = TRUE;
 
 WCHAR anykey[100], version_string[100];
-static const WCHAR envPathExt[] = {'P','A','T','H','E','X','T','\0'};
-static const WCHAR dfltPathExt[] = {'.','b','a','t',';',
-                                    '.','c','o','m',';',
-                                    '.','c','m','d',';',
-                                    '.','e','x','e','\0'};
 
 static BOOL opt_c, opt_k, opt_s, unicodeOutput = FALSE;
 
@@ -334,12 +329,10 @@ static void WCMD_show_prompt (BOOL newLine) {
   WCHAR out_string[MAX_PATH], curdir[MAX_PATH], prompt_string[MAX_PATH];
   WCHAR *p, *q;
   DWORD len;
-  static const WCHAR envPrompt[] = {'P','R','O','M','P','T','\0'};
 
-  len = GetEnvironmentVariableW(envPrompt, prompt_string, ARRAY_SIZE(prompt_string));
+  len = GetEnvironmentVariableW(L"PROMPT", prompt_string, ARRAY_SIZE(prompt_string));
   if ((len == 0) || (len >= ARRAY_SIZE(prompt_string))) {
-    static const WCHAR dfltPrompt[] = {'$','P','$','G','\0'};
-    lstrcpyW (prompt_string, dfltPrompt);
+    lstrcpyW(prompt_string, L"$P$G");
   }
   p = prompt_string;
   q = out_string;
@@ -554,13 +547,7 @@ static WCHAR *WCMD_expand_envvar(WCHAR *start, WCHAR startchar)
     WCHAR thisVarContents[MAXSTRING];
     WCHAR savedchar = 0x00;
     int len;
-
-    static const WCHAR ErrorLvl[]  = {'E','R','R','O','R','L','E','V','E','L','\0'};
-    static const WCHAR Date[]      = {'D','A','T','E','\0'};
-    static const WCHAR Time[]      = {'T','I','M','E','\0'};
-    static const WCHAR Cd[]        = {'C','D','\0'};
-    static const WCHAR Random[]    = {'R','A','N','D','O','M','\0'};
-    WCHAR Delims[]    = {'%',':','\0'}; /* First char gets replaced appropriately */
+    WCHAR Delims[] = L"%:"; /* First char gets replaced appropriately */
 
     WINE_TRACE("Expanding: %s (%c)\n", wine_dbgstr_w(start), startchar);
 
@@ -614,24 +601,22 @@ static WCHAR *WCMD_expand_envvar(WCHAR *start, WCHAR startchar)
     /* Expand to contents, if unchanged, return */
     /* Handle DATE, TIME, ERRORLEVEL and CD replacements allowing */
     /* override if existing env var called that name              */
-    if (WCMD_is_magic_envvar(thisVar, ErrorLvl)) {
-      static const WCHAR fmt[] = {'%','d','\0'};
-      wsprintfW(thisVarContents, fmt, errorlevel);
+    if (WCMD_is_magic_envvar(thisVar, L"ERRORLEVEL")) {
+      wsprintfW(thisVarContents, L"%d", errorlevel);
       len = lstrlenW(thisVarContents);
-    } else if (WCMD_is_magic_envvar(thisVar, Date)) {
+    } else if (WCMD_is_magic_envvar(thisVar, L"DATE")) {
       GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL,
                     NULL, thisVarContents, MAXSTRING);
       len = lstrlenW(thisVarContents);
-    } else if (WCMD_is_magic_envvar(thisVar, Time)) {
+    } else if (WCMD_is_magic_envvar(thisVar, L"TIME")) {
       GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, NULL,
                         NULL, thisVarContents, MAXSTRING);
       len = lstrlenW(thisVarContents);
-    } else if (WCMD_is_magic_envvar(thisVar, Cd)) {
+    } else if (WCMD_is_magic_envvar(thisVar, L"CD")) {
       GetCurrentDirectoryW(MAXSTRING, thisVarContents);
       len = lstrlenW(thisVarContents);
-    } else if (WCMD_is_magic_envvar(thisVar, Random)) {
-      static const WCHAR fmt[] = {'%','d','\0'};
-      wsprintfW(thisVarContents, fmt, rand() % 32768);
+    } else if (WCMD_is_magic_envvar(thisVar, L"RANDOM")) {
+      wsprintfW(thisVarContents, L"%d", rand() % 32768);
       len = lstrlenW(thisVarContents);
     } else {
 
@@ -1042,8 +1027,6 @@ void WCMD_run_program (WCHAR *command, BOOL called)
   BOOL  explicit_path = FALSE;
   BOOL  status;
   DWORD len;
-  static const WCHAR envPath[] = {'P','A','T','H','\0'};
-  static const WCHAR delims[] = {'/','\\',':','\0'};
 
   /* Quick way to get the filename is to extract the first argument. */
   WINE_TRACE("Running '%s' (%d)\n", wine_dbgstr_w(command), called);
@@ -1056,13 +1039,11 @@ void WCMD_run_program (WCHAR *command, BOOL called)
   }
 
   /* Calculate the search path and stem to search for */
-  if (wcspbrk (firstParam, delims) == NULL) {  /* No explicit path given, search path */
-    static const WCHAR curDir[] = {'.',';','\0'};
-    lstrcpyW(pathtosearch, curDir);
-    len = GetEnvironmentVariableW(envPath, &pathtosearch[2], ARRAY_SIZE(pathtosearch)-2);
+  if (wcspbrk(firstParam, L"/\\:") == NULL) {  /* No explicit path given, search path */
+    lstrcpyW(pathtosearch, L".;");
+    len = GetEnvironmentVariableW(L"PATH", &pathtosearch[2], ARRAY_SIZE(pathtosearch)-2);
     if ((len == 0) || (len >= ARRAY_SIZE(pathtosearch) - 2)) {
-      static const WCHAR curDir[] = {'.','\0'};
-      lstrcpyW (pathtosearch, curDir);
+      lstrcpyW(pathtosearch, L".");
     }
     if (wcschr(firstParam, '.') != NULL) extensionsupplied = TRUE;
     if (lstrlenW(firstParam) >= MAX_PATH)
@@ -1088,9 +1069,9 @@ void WCMD_run_program (WCHAR *command, BOOL called)
   }
 
   /* Now extract PATHEXT */
-  len = GetEnvironmentVariableW(envPathExt, pathext, ARRAY_SIZE(pathext));
+  len = GetEnvironmentVariableW(L"PATHEXT", pathext, ARRAY_SIZE(pathext));
   if ((len == 0) || (len >= ARRAY_SIZE(pathext))) {
-    lstrcpyW (pathext, dfltPathExt);
+    lstrcpyW(pathext, L".bat;.com;.cmd;.exe");
   }
 
   /* Loop through the search path, dir by dir */
@@ -1163,9 +1144,8 @@ void WCMD_run_program (WCHAR *command, BOOL called)
     if (!found) {
       HANDLE          h;
       WIN32_FIND_DATAW finddata;
-      static const WCHAR allFiles[] = {'.','*','\0'};
 
-      lstrcatW(thisDir,allFiles);
+      lstrcatW(thisDir, L".*");
       h = FindFirstFileW(thisDir, &finddata);
       FindClose(h);
       if (h != INVALID_HANDLE_VALUE) {
@@ -1201,13 +1181,11 @@ void WCMD_run_program (WCHAR *command, BOOL called)
       DWORD console;
       HINSTANCE hinst;
       WCHAR *ext = wcsrchr( thisDir, '.' );
-      static const WCHAR batExt[] = {'.','b','a','t','\0'};
-      static const WCHAR cmdExt[] = {'.','c','m','d','\0'};
 
       WINE_TRACE("Found as %s\n", wine_dbgstr_w(thisDir));
 
       /* Special case BAT and CMD */
-      if (ext && (!wcsicmp(ext, batExt) || !wcsicmp(ext, cmdExt))) {
+      if (ext && (!wcsicmp(ext, L".bat") || !wcsicmp(ext, L".cmd"))) {
         BOOL oldinteractive = interactive;
         interactive = FALSE;
         WCMD_batch (thisDir, command, called, NULL, INVALID_HANDLE_VALUE);
@@ -1349,7 +1327,6 @@ void WCMD_execute (const WCHAR *command, const WCHAR *redirects,
         (*cmdList)->nextcommand->prevDelim == CMD_PIPE) {
 
         WCHAR temp_path[MAX_PATH];
-        static const WCHAR cmdW[]     = {'C','M','D','\0'};
 
         /* Remember piping is in action */
         WINE_TRACE("Output needs to be piped\n");
@@ -1357,15 +1334,14 @@ void WCMD_execute (const WCHAR *command, const WCHAR *redirects,
 
         /* Generate a unique temporary filename */
         GetTempPathW(ARRAY_SIZE(temp_path), temp_path);
-        GetTempFileNameW(temp_path, cmdW, 0, (*cmdList)->nextcommand->pipeFile);
+        GetTempFileNameW(temp_path, L"CMD", 0, (*cmdList)->nextcommand->pipeFile);
         WINE_TRACE("Using temporary file of %s\n",
                    wine_dbgstr_w((*cmdList)->nextcommand->pipeFile));
     }
 
     /* If piped output, send stdout to the pipe by appending >filename to redirects */
     if (piped) {
-        static const WCHAR redirOut[] = {'%','s',' ','>',' ','%','s','\0'};
-        wsprintfW (new_redir, redirOut, redirects, (*cmdList)->nextcommand->pipeFile);
+        wsprintfW (new_redir, L"%s > %s", redirects, (*cmdList)->nextcommand->pipeFile);
         WINE_TRACE("Redirects now %s\n", wine_dbgstr_w(new_redir));
     } else {
         lstrcpyW(new_redir, redirects);
@@ -1395,8 +1371,7 @@ void WCMD_execute (const WCHAR *command, const WCHAR *redirects,
       lstrcpyW(envvar, L"=");
       lstrcatW(envvar, cmd);
       if (GetEnvironmentVariableW(envvar, dir, MAX_PATH) == 0) {
-        static const WCHAR fmt[] = {'%','s','\\','\0'};
-        wsprintfW(cmd, fmt, cmd);
+        wsprintfW(cmd, L"%s\\", cmd);
         WINE_TRACE("No special directory settings, using dir of %s\n", wine_dbgstr_w(cmd));
       }
       WINE_TRACE("Got directory %s as %s\n", wine_dbgstr_w(envvar), wine_dbgstr_w(cmd));
@@ -1675,11 +1650,10 @@ void WCMD_execute (const WCHAR *command, const WCHAR *redirects,
  */
 WCHAR *WCMD_LoadMessage(UINT id) {
     static WCHAR msg[2048];
-    static const WCHAR failedMsg[]  = {'F','a','i','l','e','d','!','\0'};
 
     if (!LoadStringW(GetModuleHandleW(NULL), id, msg, ARRAY_SIZE(msg))) {
        WINE_FIXME("LoadString failed with %d\n", GetLastError());
-       lstrcpyW(msg, failedMsg);
+       lstrcpyW(msg, L"Failed!");
     }
     return msg;
 }
@@ -2440,11 +2414,6 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
   BOOL promptNewLine = TRUE;
   BOOL opt_q;
   int opt_t = 0;
-  static const WCHAR offW[] = {'O','F','F','\0'};
-  static const WCHAR promptW[] = {'P','R','O','M','P','T','\0'};
-  static const WCHAR defaultpromptW[] = {'$','P','$','G','\0'};
-  static const WCHAR comspecW[] = {'C','O','M','S','P','E','C',0};
-  static const WCHAR cmdW[] = {'\\','c','m','d','.','e','x','e',0};
   WCHAR comspec[MAX_PATH];
   CMD_LIST *toExecute = NULL;         /* Commands left to be executed */
   RTL_OSVERSIONINFOEXW osv;
@@ -2452,11 +2421,11 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
   STARTUPINFOW startupInfo;
   const WCHAR *arg;
 
-  if (!GetEnvironmentVariableW(comspecW, comspec, ARRAY_SIZE(comspec)))
+  if (!GetEnvironmentVariableW(L"COMSPEC", comspec, ARRAY_SIZE(comspec)))
   {
-      GetSystemDirectoryW(comspec, ARRAY_SIZE(comspec) - ARRAY_SIZE(cmdW));
-      lstrcatW(comspec, cmdW);
-      SetEnvironmentVariableW(comspecW, comspec);
+      GetSystemDirectoryW(comspec, ARRAY_SIZE(comspec) - ARRAY_SIZE(L"\\cmd.exe"));
+      lstrcatW(comspec, L"\\cmd.exe");
+      SetEnvironmentVariableW(L"COMSPEC", comspec);
   }
 
   srand(time(NULL));
@@ -2528,13 +2497,13 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
   while (*arg && wcschr(L" \t,=;", *arg)) arg++;
 
   if (opt_q) {
-    WCMD_echo(offW);
+    WCMD_echo(L"OFF");
   }
 
   /* Until we start to read from the keyboard, stay as non-interactive */
   interactive = FALSE;
 
-  SetEnvironmentVariableW(promptW, defaultpromptW);
+  SetEnvironmentVariableW(L"PROMPT", L"$P$G");
 
   if (opt_c || opt_k) {
       int     len;
@@ -2592,9 +2561,9 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
         BOOL found = FALSE;
 
         /* Now extract PATHEXT */
-        len = GetEnvironmentVariableW(envPathExt, pathext, ARRAY_SIZE(pathext));
+        len = GetEnvironmentVariableW(L"PATHEXT", pathext, ARRAY_SIZE(pathext));
         if ((len == 0) || (len >= ARRAY_SIZE(pathext))) {
-          lstrcpyW (pathext, dfltPathExt);
+          lstrcpyW(pathext, L".bat;.com;.cmd;.exe");
         }
 
         /* If the supplied parameter has any directory information, look there */
@@ -2681,8 +2650,7 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
   /* Save cwd into appropriate env var (Must be before the /c processing */
   GetCurrentDirectoryW(ARRAY_SIZE(string), string);
   if (IsCharAlphaW(string[0]) && string[1] == ':') {
-    static const WCHAR fmt[] = {'=','%','c',':','\0'};
-    wsprintfW(envvar, fmt, string[0]);
+    wsprintfW(envvar, L"=%c:", string[0]);
     SetEnvironmentVariableW(envvar, string);
     WINE_TRACE("Set %s to %s\n", wine_dbgstr_w(envvar), wine_dbgstr_w(string));
   }
@@ -2726,26 +2694,20 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
       HKEY key;
       DWORD type;
       DWORD value=0, size=4;
-      static const WCHAR regKeyW[] = {'S','o','f','t','w','a','r','e','\\',
-                                      'M','i','c','r','o','s','o','f','t','\\',
-                                      'C','o','m','m','a','n','d',' ','P','r','o','c','e','s','s','o','r','\0'};
-      static const WCHAR dfltColorW[] = {'D','e','f','a','u','l','t','C','o','l','o','r','\0'};
+      static const WCHAR regKeyW[] = L"Software\\Microsoft\\Command Processor";
 
       if (RegOpenKeyExW(HKEY_CURRENT_USER, regKeyW,
                        0, KEY_READ, &key) == ERROR_SUCCESS) {
           WCHAR  strvalue[4];
 
           /* See if DWORD or REG_SZ */
-          if (RegQueryValueExW(key, dfltColorW, NULL, &type,
-                     NULL, NULL) == ERROR_SUCCESS) {
+          if (RegQueryValueExW(key, L"DefaultColor", NULL, &type, NULL, NULL) == ERROR_SUCCESS) {
               if (type == REG_DWORD) {
                   size = sizeof(DWORD);
-                  RegQueryValueExW(key, dfltColorW, NULL, NULL,
-                                  (LPBYTE)&value, &size);
+                  RegQueryValueExW(key, L"DefaultColor", NULL, NULL, (BYTE *)&value, &size);
               } else if (type == REG_SZ) {
                   size = ARRAY_SIZE(strvalue);
-                  RegQueryValueExW(key, dfltColorW, NULL, NULL,
-                                  (LPBYTE)strvalue, &size);
+                  RegQueryValueExW(key, L"DefaultColor", NULL, NULL, (BYTE *)strvalue, &size);
                   value = wcstoul(strvalue, NULL, 10);
               }
           }
@@ -2757,16 +2719,14 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
           WCHAR  strvalue[4];
 
           /* See if DWORD or REG_SZ */
-          if (RegQueryValueExW(key, dfltColorW, NULL, &type,
+          if (RegQueryValueExW(key, L"DefaultColor", NULL, &type,
                      NULL, NULL) == ERROR_SUCCESS) {
               if (type == REG_DWORD) {
                   size = sizeof(DWORD);
-                  RegQueryValueExW(key, dfltColorW, NULL, NULL,
-                                  (LPBYTE)&value, &size);
+                  RegQueryValueExW(key, L"DefaultColor", NULL, NULL, (BYTE *)&value, &size);
               } else if (type == REG_SZ) {
                   size = ARRAY_SIZE(strvalue);
-                  RegQueryValueExW(key, dfltColorW, NULL, NULL,
-                                  (LPBYTE)strvalue, &size);
+                  RegQueryValueExW(key, L"DefaultColor", NULL, NULL, (BYTE *)strvalue, &size);
                   value = wcstoul(strvalue, NULL, 10);
               }
           }
-- 
2.26.2




More information about the wine-devel mailing list