From 5c319cebe7e50aa5c1044d7cfac804576b0c24eb Mon Sep 17 00:00:00 2001 From: rfm Date: Sun, 5 Feb 2006 10:56:35 +0000 Subject: [PATCH] Fix wide character output for 64bit wide characters. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@22432 72102866-910b-0410-8b05-ffd578937521 --- Source/NSString.m | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Source/NSString.m b/Source/NSString.m index 4743b9816..aa7d121aa 100644 --- a/Source/NSString.m +++ b/Source/NSString.m @@ -447,18 +447,35 @@ handle_printf_atsign (FILE *stream, #else string_object = *((id*) ptr); #endif + string_object = [string_object description]; if (info->wide) { - len = fwprintf(stream, L"%*ls", - (info->left ? - info->width : info->width), - [[string_object description] - cStringUsingEncoding: NSUnicodeStringEncoding]); + if (sizeof(wchar_t) == 4) + { + unsigned length = [string_object length]; + wchar_t buf[length + 1]; + unsigned i; + + for (i = 0; i < length; i++) + { + buf[i] = [string_object characterAtIndex: i]; + } + buf[i] = 0; + len = fwprintf(stream, L"%*ls", + (info->left ? - info->width : info->width), buf); + } + else + { + len = fwprintf(stream, L"%*ls", + (info->left ? - info->width : info->width), + [string_object cStringUsingEncoding: NSUnicodeStringEncoding]); + } } else { len = fprintf(stream, "%*s", (info->left ? - info->width : info->width), - [[string_object description] lossyCString]); + [string_object lossyCString]); } return len; }