Diff
Modified: MacRuby/trunk/NSString.m (5222 => 5223)
--- 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 (5222 => 5223)
--- 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 (5222 => 5223)
--- 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 *