[macruby-changes] [5223] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Feb 8 18:29:50 PST 2011


Revision: 5223
          http://trac.macosforge.org/projects/ruby/changeset/5223
Author:   lsansonetti at apple.com
Date:     2011-02-08 18:29:50 -0800 (Tue, 08 Feb 2011)
Log Message:
-----------
better RSTRING_{PTR,LEN] for pure NSStrings

Modified Paths:
--------------
    MacRuby/trunk/NSString.m
    MacRuby/trunk/encoding.h
    MacRuby/trunk/string.c

Modified: MacRuby/trunk/NSString.m
===================================================================
--- MacRuby/trunk/NSString.m	2011-02-09 02:28:44 UTC (rev 5222)
+++ MacRuby/trunk/NSString.m	2011-02-09 02:29:50 UTC (rev 5223)
@@ -427,3 +427,15 @@
     rb_objc_define_method(rb_cString, "to_data", rstr_only, 0);
     rb_objc_define_method(rb_cString, "pointer", rstr_only, 0);
 }
+
+const char *
+nsstr_cstr(VALUE str)
+{
+    return [(NSString *)str UTF8String];
+}
+
+long
+nsstr_clen(VALUE str)
+{
+    return [(NSString *)str lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+}

Modified: MacRuby/trunk/encoding.h
===================================================================
--- MacRuby/trunk/encoding.h	2011-02-09 02:28:44 UTC (rev 5222)
+++ MacRuby/trunk/encoding.h	2011-02-09 02:29:50 UTC (rev 5223)
@@ -378,6 +378,9 @@
 
 VALUE rstr_new_path(const char *path);
 
+const char *nsstr_cstr(VALUE str);
+long nsstr_clen(VALUE str);
+
 #if defined(__cplusplus)
 } // extern "C"
 #endif

Modified: MacRuby/trunk/string.c
===================================================================
--- MacRuby/trunk/string.c	2011-02-09 02:28:44 UTC (rev 5222)
+++ MacRuby/trunk/string.c	2011-02-09 02:29:50 UTC (rev 5223)
@@ -6333,24 +6333,7 @@
 	str_ensure_null_terminator(RSTR(str));
 	return RSTR(str)->bytes;
     }
-
-    // CFString code path, hopefully this should not happen very often.
-    const char *cptr = (const char *)CFStringGetCStringPtr((CFStringRef)str, 0);
-    if (cptr != NULL) {
-	return cptr;
-    }
-
-    const long max = CFStringGetMaximumSizeForEncoding(
-	    CFStringGetLength((CFStringRef)str),
-	    kCFStringEncodingUTF8);
-    char *cptr2 = (char *)xmalloc(max + 1);
-    if (!CFStringGetCString((CFStringRef)str, cptr2, max + 1,
-		kCFStringEncodingUTF8)) {
-	// Probably an UTF16 string...
-	xfree(cptr2);
-	return NULL;
-    }
-    return cptr2;
+    return nsstr_cstr(str);
 }
 
 long
@@ -6359,7 +6342,7 @@
     if (IS_RSTR(str)) {
 	return RSTR(str)->length_in_bytes;
     }
-    return CFStringGetLength((CFStringRef)str);
+    return nsstr_clen(str);
 }
 
 char *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20110208/6bbb3c28/attachment.html>


More information about the macruby-changes mailing list