[macruby-changes] [3782] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Mar 16 18:43:06 PDT 2010


Revision: 3782
          http://trac.macosforge.org/projects/ruby/changeset/3782
Author:   lsansonetti at apple.com
Date:     2010-03-16 18:43:05 -0700 (Tue, 16 Mar 2010)
Log Message:
-----------
IO and Marshal now returning UTF8 strings

Modified Paths:
--------------
    MacRuby/trunk/encoding.h
    MacRuby/trunk/io.c
    MacRuby/trunk/marshal.c
    MacRuby/trunk/string.c

Modified: MacRuby/trunk/encoding.h
===================================================================
--- MacRuby/trunk/encoding.h	2010-03-17 00:32:04 UTC (rev 3781)
+++ MacRuby/trunk/encoding.h	2010-03-17 01:43:05 UTC (rev 3782)
@@ -306,6 +306,7 @@
 unsigned long rb_str_hash_uchars(const UChar *chars, long chars_len);
 long rb_uchar_strtol(UniChar *chars, long chars_len, long pos,
 	long *end_offset);
+void rb_str_force_encoding(VALUE str, rb_encoding_t *encoding);
 
 #if defined(__cplusplus)
 } // extern "C"

Modified: MacRuby/trunk/io.c
===================================================================
--- MacRuby/trunk/io.c	2010-03-17 00:32:04 UTC (rev 3781)
+++ MacRuby/trunk/io.c	2010-03-17 01:43:05 UTC (rev 3782)
@@ -1118,12 +1118,15 @@
     rb_io_t *io_struct = ExtractIOStruct(io);
     rb_io_assert_readable(io_struct);
 
+    bool outbuf_created = false;
     if (NIL_P(outbuf)) {
 	outbuf = rb_bstr_new();
+	outbuf_created = true;
     }
 
     if (NIL_P(len)) {
-        return rb_io_read_all(io_struct, outbuf);
+	rb_io_read_all(io_struct, outbuf);
+	goto bail;
     }
 
     const long size = FIX2LONG(len);
@@ -1148,6 +1151,10 @@
     }
     rb_bstr_set_length(outbuf, data_read);
 
+bail:
+    if (outbuf_created) {
+	rb_str_force_encoding(outbuf, rb_encodings[ENCODING_UTF8]);
+    }
     return outbuf;
 }
 
@@ -1365,6 +1372,7 @@
     OBJ_TAINT(bstr);
     io_struct->lineno += 1;
     ARGF.lineno = INT2FIX(io_struct->lineno);
+    rb_str_force_encoding(bstr, rb_encodings[ENCODING_UTF8]);
     return bstr; 
 }
 
@@ -3346,7 +3354,7 @@
     VALUE outbuf = rb_bstr_new();
     rb_io_read_all(ExtractIOStruct(io), outbuf);
     rb_io_close(io);
-
+    rb_str_force_encoding(outbuf, rb_encodings[ENCODING_UTF8]);
     return outbuf;
 }
 
@@ -3852,7 +3860,7 @@
 	void *ptr;
 	while ((ptr = memchr(&bytes[pos], byte, length - pos)) != NULL) {
 	    const long s = (long)ptr - (long)&bytes[pos] + 1;
-	    rb_ary_push(ary, rb_bstr_new_with_data(&bytes[pos], s));
+	    rb_ary_push(ary, rb_str_new((char *)&bytes[pos], s));
 	    pos += s; 
 	}
     }

Modified: MacRuby/trunk/marshal.c
===================================================================
--- MacRuby/trunk/marshal.c	2010-03-17 00:32:04 UTC (rev 3781)
+++ MacRuby/trunk/marshal.c	2010-03-17 01:43:05 UTC (rev 3782)
@@ -1023,7 +1023,9 @@
     if (got_io) {
 	rb_io_write(port, 0, arg->str);	
     }
-
+    else {
+	rb_str_force_encoding(port, rb_encodings[ENCODING_UTF8]);
+    }
     return port;
 }
 

Modified: MacRuby/trunk/string.c
===================================================================
--- MacRuby/trunk/string.c	2010-03-17 00:32:04 UTC (rev 3781)
+++ MacRuby/trunk/string.c	2010-03-17 01:43:05 UTC (rev 3782)
@@ -1533,22 +1533,28 @@
  *  Changes the encoding to +encoding+ and returns self.
  */
 
+void
+rb_str_force_encoding(VALUE str, rb_encoding_t *enc)
+{
+    assert(IS_RSTR(str));
+    if (enc != RSTR(str)->encoding) {
+	str_make_data_binary(RSTR(str));
+	if (NATIVE_UTF16_ENC(RSTR(str)->encoding)) {
+	    str_set_stored_in_uchars(RSTR(str), false);
+	}
+	RSTR(str)->encoding = enc;
+	str_unset_facultative_flags(RSTR(str));
+	if (NATIVE_UTF16_ENC(RSTR(str)->encoding)) {
+	    str_set_stored_in_uchars(RSTR(str), true);
+	}
+    }
+}
+
 static VALUE
 rstr_force_encoding(VALUE self, SEL sel, VALUE encoding)
 {
     rstr_modify(self);
-    rb_encoding_t *enc = rb_to_encoding(encoding);
-    if (enc != RSTR(self)->encoding) {
-	str_make_data_binary(RSTR(self));
-	if (NATIVE_UTF16_ENC(RSTR(self)->encoding)) {
-	    str_set_stored_in_uchars(RSTR(self), false);
-	}
-	RSTR(self)->encoding = enc;
-	str_unset_facultative_flags(RSTR(self));
-	if (NATIVE_UTF16_ENC(RSTR(self)->encoding)) {
-	    str_set_stored_in_uchars(RSTR(self), true);
-	}
-    }
+    rb_str_force_encoding(self, rb_to_encoding(encoding));
     return self;
 }
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100316/26da4845/attachment.html>


More information about the macruby-changes mailing list