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'; }