* dcrt0.cc (dll_crt0_1): Use GetCommandLineW and convert to current
codepage. * environ.cc (set_file_api_mode): Always set file api to ANSI if not using the OEM codepage. (codepage_init): Allow "utf8" codepage. * fhandler_clipboard.cc (set_clipboard): Convert clipbuf to void and cast as needed. Always convert input to wide char and write CF_UNICODETEXT to clipboard. (fhandler_dev_clipboard::read): Read CF_UNICODETEXT from clipboard and convert to current codepage if CYGWIN_NATIVE format is not available. * fhandler_console.cc: Drop redundant undef. * smallprint.cc (__small_vsprintf): Convert PWCHAR and UNICODE_STRING to current codepage for printing. * strfuncs.cc: Use PWCHAR throughout. (get_cp): Return CP_UTF8 for utf8_cp codepage setting. (sys_wcstombs): Allow NULL target buffer. (sys_wcstombs_alloc): New function. (sys_mbstowcs_alloc): Ditto. * winsup.h (codepage_type): Add utf8_cp. (HEAP_NOTHEAP): Define. (sys_wcstombs_alloc): Declare. (sys_mbstowcs_alloc): Declare.
This commit is contained in:
@ -195,24 +195,17 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap)
|
||||
us = va_arg (ap, PUNICODE_STRING);
|
||||
wfillin:
|
||||
{
|
||||
ANSI_STRING as = { 0, 0, NULL };
|
||||
NTSTATUS status;
|
||||
char *tmp;
|
||||
|
||||
if (current_codepage == ansi_cp)
|
||||
status = RtlUnicodeStringToAnsiString (&as, us, TRUE);
|
||||
else
|
||||
status = RtlUnicodeStringToOemString (&as, us, TRUE);
|
||||
if (!NT_SUCCESS (status))
|
||||
if (!sys_wcstombs_alloc (&tmp, PATH_MAX, us->Buffer,
|
||||
us->Length / sizeof (WCHAR)))
|
||||
{
|
||||
s = "invalid UNICODE_STRING";
|
||||
goto fillin;
|
||||
}
|
||||
for (i = 0; i < as.Length; ++i)
|
||||
*dst++ = as.Buffer[i];
|
||||
if (current_codepage == ansi_cp)
|
||||
RtlFreeAnsiString (&as);
|
||||
else
|
||||
RtlFreeOemString (&as);
|
||||
for (i = 0; *tmp && i < n; i++)
|
||||
*dst++ = *tmp++;
|
||||
free (tmp);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
Reference in New Issue
Block a user