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