diff --git a/ChangeLog b/ChangeLog index 19bc29220..e61595e86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-10-02 Richard Frith-Macdonald + + * Source/NSLog.m: _NSLog_standard_printf_handler() modified to output + message as UTF8 data if it can't be done as ASCII + 2001-09-27 Richard Frith-Macdonald * Source/NSString: setupQuotables() ... add several characters to the diff --git a/Source/NSLog.m b/Source/NSLog.m index f967639ab..2f53a4b9a 100644 --- a/Source/NSLog.m +++ b/Source/NSLog.m @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef HAVE_SYSLOG_H #include @@ -41,12 +42,29 @@ static void _NSLog_standard_printf_handler (NSString* message) { - unsigned len = [message cStringLength]; - char buf[len+1]; + NSData *d; + const char *buf; + unsigned len; - [message getCString: buf]; - buf[len] = '\0'; + d = [message dataUsingEncoding: NSASCIIStringEncoding + allowLossyConversion: NO]; + if (d == nil) + { + d = [message dataUsingEncoding: NSUTF8StringEncoding + allowLossyConversion: NO]; + } + if (d == nil) // Should never happen. + { + buf = [message lossyCString]; + len = strlen(buf); + } + else + { + buf = (const char*)[d bytes]; + len = [d length]; + } + #ifdef HAVE_SYSLOG if (write(2, buf, len) != len)