[macruby-changes] [3761] MacRuby/trunk/string.c
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 12 23:28:50 PST 2010
Revision: 3761
http://trac.macosforge.org/projects/ruby/changeset/3761
Author: lsansonetti at 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 *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100312/f2ce00f7/attachment-0001.html>
More information about the macruby-changes
mailing list