From 04bfaf2fb5d2f1126e2d2237b58ee00f6e4e6913 Mon Sep 17 00:00:00 2001 From: CaS Date: Sun, 8 May 2005 15:07:59 +0000 Subject: [PATCH] Fix for unicode data returned as cstring. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@21199 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/GSString.m | 13 +++++++++++-- Source/NSString.m | 15 ++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index a6f3e4c65..6ab0d8c58 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-05-08 Richard Frith-Macdonald + + * Source/NSString.m: nul terminate properly when a returned 'C string' + is actually unicode. + * Source/GSString.m: ditto. + 2005-05-08 Fred Kiefer * Source/NSPropertyList.m: Added class BinaryPLGenerator to export diff --git a/Source/GSString.m b/Source/GSString.m index 50450294b..120787071 100644 --- a/Source/GSString.m +++ b/Source/GSString.m @@ -927,7 +927,7 @@ cString_c(GSStr self, NSStringEncoding enc) if (self->_count == 0) { - return ""; + return "\0"; } if (enc == intEnc) { @@ -976,7 +976,16 @@ cString_u(GSStr self, NSStringEncoding enc) if (c == 0) { - return ""; + return "\0"; + } + else if (enc == NSUnicodeStringEncoding) + { + unichar *tmp = (unichar*)NSZoneMalloc(NSDefaultMallocZone(), (c + 1)*2); + + memcpy(tmp, self->_contents.u, c*2); + tmp[c] = 0; + [NSData dataWithBytesNoCopy: tmp length: (c + 1)*2 freeWhenDone: YES]; + return (char*)tmp; } else { diff --git a/Source/NSString.m b/Source/NSString.m index 08a4ae659..79899d919 100644 --- a/Source/NSString.m +++ b/Source/NSString.m @@ -2849,7 +2849,16 @@ handle_printf_atsign (FILE *stream, format: @"unable to convert to cString"]; } m = [d mutableCopy]; - [m appendBytes: "" length: 1]; + if (encoding == NSUnicodeStringEncoding) + { + unichar c = 0; + + [m appendBytes: &c length: 2]; + } + else + { + [m appendBytes: "" length: 1]; + } AUTORELEASE(m); return (const char*)[m bytes]; } @@ -2974,6 +2983,10 @@ handle_printf_atsign (FILE *stream, if (len > maxLength) len = maxLength; memcpy(buffer, [d bytes], len); + if (encoding == NSUnicodeStringEncoding) + { + buffer[len++] = '\0'; + } buffer[len] = '\0'; }