[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