Jason Edmeades : cmd.exe: Add support for cmd.exe /u ( Unicode from internal pgms).

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jun 15 07:23:12 CDT 2007


Module: wine
Branch: master
Commit: 7e9d498d1ec15b6bd20542e58bb725e006735ec5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7e9d498d1ec15b6bd20542e58bb725e006735ec5

Author: Jason Edmeades <jason.edmeades at googlemail.com>
Date:   Thu Jun 14 23:06:37 2007 +0100

cmd.exe: Add support for cmd.exe /u (Unicode from internal pgms).

---

 programs/cmd/wcmdmain.c |   40 +++++++++++++++++++++++++---------------
 1 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 2a7afe1..3f4cdd0 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -92,6 +92,7 @@ extern struct env_stack *pushd_directories;
 static const WCHAR *pagedMessage = NULL;
 static char  *output_bufA = NULL;
 #define MAX_WRITECONSOLE_SIZE 65535
+BOOL unicodePipes = FALSE;
 
 static WCHAR *WCMD_expand_envvar(WCHAR *start);
 
@@ -141,6 +142,10 @@ int wmain (int argc, WCHAR *argvW[])
           opt_k=1;
       } else if (tolowerW(c)=='s') {
           opt_s=1;
+      } else if (tolowerW(c)=='a') {
+          unicodePipes=FALSE;
+      } else if (tolowerW(c)=='u') {
+          unicodePipes=TRUE;
       } else if (tolowerW(c)=='t' && (*argvW)[2]==':') {
           opt_t=strtoulW(&(*argvW)[3], NULL, 16);
       } else if (tolowerW(c)=='x' || tolowerW(c)=='y') {
@@ -1306,22 +1311,27 @@ static void WCMD_output_asis_len(const WCHAR *message, int len) {
       BOOL usedDefaultChar = FALSE;
       DWORD convertedChars;
 
-      /*
-       * Allocate buffer to use when writing to file. (Not freed, as one off)
-       */
-      if (!output_bufA) output_bufA = HeapAlloc(GetProcessHeap(), 0,
-                                                MAX_WRITECONSOLE_SIZE);
-      if (!output_bufA) {
-        WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n");
-        return;
-      }
+      if (!unicodePipes) {
+        /*
+         * Allocate buffer to use when writing to file. (Not freed, as one off)
+         */
+        if (!output_bufA) output_bufA = HeapAlloc(GetProcessHeap(), 0,
+                                                  MAX_WRITECONSOLE_SIZE);
+        if (!output_bufA) {
+          WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n");
+          return;
+        }
 
-      /* Convert to OEM, then output */
-      convertedChars = WideCharToMultiByte(GetConsoleOutputCP(), 0, message,
-                          len, output_bufA, MAX_WRITECONSOLE_SIZE,
-                          "?", &usedDefaultChar);
-      WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), output_bufA, convertedChars,
-                &nOut, FALSE);
+        /* Convert to OEM, then output */
+        convertedChars = WideCharToMultiByte(GetConsoleOutputCP(), 0, message,
+                            len, output_bufA, MAX_WRITECONSOLE_SIZE,
+                            "?", &usedDefaultChar);
+        WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), output_bufA, convertedChars,
+                  &nOut, FALSE);
+      } else {
+        WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), message, len*sizeof(WCHAR),
+                  &nOut, FALSE);
+      }
     }
     return;
 }




More information about the wine-cvs mailing list