From 44587e392df972e08a7d8097b9f5a3de82106e4b Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 1 Aug 2007 07:39:21 +0000 Subject: * smallprint.cc (__small_vsprintf): Add format specifier 'W' for PWCHAR arguments. Move wide char handling after char handling. --- winsup/cygwin/smallprint.cc | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'winsup/cygwin/smallprint.cc') diff --git a/winsup/cygwin/smallprint.cc b/winsup/cygwin/smallprint.cc index d06f558da..bdf50288b 100644 --- a/winsup/cygwin/smallprint.cc +++ b/winsup/cygwin/smallprint.cc @@ -66,6 +66,8 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap) char tmp[CYG_MAX_PATH + 1]; char *orig = dst; const char *s; + PWCHAR w; + UNICODE_STRING uw, *us; DWORD err = GetLastError (); @@ -171,9 +173,27 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap) else s = tmp; goto fillin; + case '.': + n = strtol (fmt, (char **) &fmt, 10); + if (*fmt++ != 's') + goto endfor; + case 's': + s = va_arg (ap, char *); + if (s == NULL) + s = "(null)"; + fillin: + for (i = 0; *s && i < n; i++) + *dst++ = *s++; + break; + case 'W': + w = va_arg (ap, PWCHAR); + RtlInitUnicodeString (&uw, w); + us = &uw; + goto wfillin; case 'S': + us = va_arg (ap, PUNICODE_STRING); + wfillin: { - PUNICODE_STRING us = va_arg (ap, PUNICODE_STRING); ANSI_STRING as = { 0, 0, NULL }; NTSTATUS status; @@ -194,18 +214,6 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap) RtlFreeOemString (&as); } break; - case '.': - n = strtol (fmt, (char **) &fmt, 10); - if (*fmt++ != 's') - goto endfor; - case 's': - s = va_arg (ap, char *); - if (s == NULL) - s = "(null)"; - fillin: - for (i = 0; *s && i < n; i++) - *dst++ = *s++; - break; default: *dst++ = '?'; *dst++ = fmt[-1]; -- cgit v1.2.3