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
This commit is contained in:
Richard Frith-Macdonald 2005-05-08 15:07:59 +00:00
parent 6dc94f8b09
commit efd0cf202c
3 changed files with 31 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2005-05-08 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSString.m: nul terminate properly when a returned 'C string'
is actually unicode.
* Source/GSString.m: ditto.
2005-05-08 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSPropertyList.m: Added class BinaryPLGenerator to export

View file

@ -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
{

View file

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