[前][次][番号順一覧][スレッド一覧]

ruby-changes:2051

From: ko1@a...
Date: 28 Sep 2007 13:20:24 +0900
Subject: [ruby-changes:2051] nobu - Ruby:r13542 (trunk): * io.c (rb_io_getline_fast, rb_io_getline_1): set encoding to the

nobu	2007-09-28 13:20:12 +0900 (Fri, 28 Sep 2007)

  New Revision: 13542

  Modified files:
    trunk/ChangeLog
    trunk/io.c

  Log:
    * io.c (rb_io_getline_fast, rb_io_getline_1): set encoding to the
      result string, as well as getc.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13542&r2=13541
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=13542&r2=13541

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13541)
+++ ChangeLog	(revision 13542)
@@ -1,3 +1,8 @@
+Fri Sep 28 13:20:10 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* io.c (rb_io_getline_fast, rb_io_getline_1): set encoding to the
+	  result string, as well as getc.
+
 Fri Sep 28 12:51:42 2007  Koichi Sasada  <ko1@a...>
 
 	* benchmark/bm_app_erb.rb: added.
Index: io.c
===================================================================
--- io.c	(revision 13541)
+++ io.c	(revision 13542)
@@ -1637,7 +1637,7 @@
 }
 
 static VALUE
-rb_io_getline_fast(rb_io_t *fptr, unsigned char delim, long limit)
+rb_io_getline_fast(rb_io_t *fptr, unsigned char delim, long limit, rb_encoding *enc)
 {
     VALUE str = Qnil;
     int c, nolimit = 0;
@@ -1652,6 +1652,7 @@
     }
 
     if (!NIL_P(str)) {
+	rb_enc_associate(str, enc);
 	if (!nolimit) {
 	    fptr->lineno++;
 	    lineno = INT2FIX(fptr->lineno);
@@ -1700,21 +1701,23 @@
 static VALUE
 rb_io_getline_1(VALUE rs, long limit, VALUE io)
 {
+    rb_encoding *enc;
     VALUE str = Qnil;
     rb_io_t *fptr;
     int nolimit = 0;
 
     GetOpenFile(io, fptr);
     rb_io_check_readable(fptr);
+    enc = rb_enc_get(io);
     if (NIL_P(rs)) {
 	str = read_all(fptr, 0, Qnil);
 	if (RSTRING_LEN(str) == 0) return Qnil;
     }
     else if (limit == 0) {
-	return rb_str_new(0,0);
+	return rb_enc_str_new(0, 0, enc);
     }
     else if (rs == rb_default_rs) {
-	return rb_io_getline_fast(fptr, '\n', limit);
+	return rb_io_getline_fast(fptr, '\n', limit, enc);
     }
     else {
 	int c, newline;
@@ -1730,7 +1733,8 @@
 	    swallow(fptr, '\n');
 	}
 	else if (rslen == 1) {
-	    return rb_io_getline_fast(fptr, (unsigned char)RSTRING_PTR(rs)[0], limit);
+	    return rb_io_getline_fast(fptr, (unsigned char)RSTRING_PTR(rs)[0],
+				      limit, enc);
 	}
 	else {
 	    rsptr = RSTRING_PTR(rs);
@@ -1758,6 +1762,7 @@
     }
 
     if (!NIL_P(str)) {
+	rb_enc_associate(str, enc);
 	if (!nolimit) {
 	    fptr->lineno++;
 	    lineno = INT2FIX(fptr->lineno);
@@ -1785,7 +1790,7 @@
 
     GetOpenFile(io, fptr);
     rb_io_check_readable(fptr);
-    return rb_io_getline_fast(fptr, '\n', 0);
+    return rb_io_getline_fast(fptr, '\n', 0, rb_enc_get(io));
 }
 
 /*

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]