Revision: 5223 http://trac.macosforge.org/projects/ruby/changeset/5223 Author: lsansonetti@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 *
participants (1)
-
source_changes@macosforge.org