diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2007-08-01 07:39:21 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2007-08-01 07:39:21 +0000 |
commit | 44587e392df972e08a7d8097b9f5a3de82106e4b (patch) | |
tree | a7b43a31914df51f94b25e183d70c85eab96055f /winsup/cygwin | |
parent | f7c978d50fb7f510864ff4770fa7793a47a0b613 (diff) | |
download | cygnal-44587e392df972e08a7d8097b9f5a3de82106e4b.tar.gz cygnal-44587e392df972e08a7d8097b9f5a3de82106e4b.tar.bz2 cygnal-44587e392df972e08a7d8097b9f5a3de82106e4b.zip |
* smallprint.cc (__small_vsprintf): Add format specifier 'W' for
PWCHAR arguments. Move wide char handling after char handling.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/smallprint.cc | 34 |
2 files changed, 26 insertions, 13 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 2cbcf39c1..c9e7b2f5e 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2007-08-01 Corinna Vinschen <corinna@vinschen.de> + + * smallprint.cc (__small_vsprintf): Add format specifier 'W' for + PWCHAR arguments. Move wide char handling after char handling. + 2007-07-31 Corinna Vinschen <corinna@vinschen.de> * ntdll.h (RtlFreeAnsiString): Declare. 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]; |