[3761] MacRuby/trunk/string.c
Revision: 3761 http://trac.macosforge.org/projects/ruby/changeset/3761 Author: lsansonetti@apple.com Date: 2010-03-12 23:28:48 -0800 (Fri, 12 Mar 2010) Log Message: ----------- added support for NSString -> bytestring coercion Modified Paths: -------------- MacRuby/trunk/string.c Modified: MacRuby/trunk/string.c =================================================================== --- MacRuby/trunk/string.c 2010-03-13 04:33:48 UTC (rev 3760) +++ MacRuby/trunk/string.c 2010-03-13 07:28:48 UTC (rev 3761) @@ -5432,11 +5432,28 @@ VALUE rb_str_bstr(VALUE str) { - if (IS_RSTR(str)) { - str_make_data_binary(RSTR(str)); - return str; + if (!IS_RSTR(str)) { + const char *cptr = CFStringGetCStringPtr((CFStringRef)str, + kCFStringEncodingUTF8); + if (cptr != NULL) { + str = rb_str_new2(cptr); + } + else { + const long max = CFStringGetMaximumSizeForEncoding( + CFStringGetLength((CFStringRef)str), kCFStringEncodingUTF8); + assert(max > 0); + char *buf = (char *)malloc(max + 1); + if (!CFStringGetCString((CFStringRef)str, buf, max, + kCFStringEncodingUTF8)) { + free(buf); + rb_raise(rb_eArgError, + "cannot coerce NSString %p as UTF-8 data", (void *)str); + } + str = rb_str_new2(buf); + } } - abort(); // TODO + str_make_data_binary(RSTR(str)); + return str; } uint8_t *
participants (1)
-
source_changes@macosforge.org