ruby-changes:3051
From: ko1@a...
Date: 24 Dec 2007 03:01:42 +0900
Subject: [ruby-changes:3051] matz - Ruby:r14543 (trunk): * io.c (rb_io_check_readable): should not fill fptr->enc always.
matz 2007-12-24 03:01:16 +0900 (Mon, 24 Dec 2007)
New Revision: 14543
Modified files:
trunk/ChangeLog
trunk/io.c
Log:
* io.c (rb_io_check_readable): should not fill fptr->enc always.
read-write IO (e.g. socket) does not work. [ruby-dev:32685]
* io.c (io_read_encoding): retrieve reading encoding.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14543&r2=14542
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=14543&r2=14542
Index: ChangeLog
===================================================================
--- ChangeLog (revision 14542)
+++ ChangeLog (revision 14543)
@@ -1,3 +1,10 @@
+Mon Dec 24 02:59:32 2007 Yukihiro Matsumoto <matz@r...>
+
+ * io.c (rb_io_check_readable): should not fill fptr->enc always.
+ read-write IO (e.g. socket) does not work. [ruby-dev:32685]
+
+ * io.c (io_read_encoding): retrieve reading encoding.
+
Mon Dec 24 02:06:35 2007 Yukihiro Matsumoto <matz@r...>
* io.c (rb_f_open): documentation update.
Index: io.c
===================================================================
--- io.c (revision 14542)
+++ io.c (revision 14543)
@@ -347,13 +347,22 @@
if (fptr->wbuf_len) {
io_fflush(fptr);
}
- if (!fptr->enc) {
- fptr->enc = (fptr->mode & FMODE_BINMODE)
- ? rb_ascii8bit_encoding()
- : rb_default_external_encoding();
+ if (!fptr->enc && fptr->fd == 0) {
+ fptr->enc = rb_default_external_encoding();
}
}
+static rb_encoding*
+io_read_encoding(rb_io_t *fptr)
+{
+ if (fptr->enc) {
+ return fptr->enc;
+ }
+ return (fptr->mode & FMODE_BINMODE)
+ ? rb_ascii8bit_encoding()
+ : rb_default_external_encoding();
+}
+
void
rb_io_check_writable(rb_io_t *fptr)
{
@@ -1307,7 +1316,7 @@
rb_enc_from_encoding(fptr->enc),
rb_enc_from_encoding(fptr->enc2));
}
- else {
+ else if (fptr->enc) {
/* just one encoding, so associate it with the string */
rb_enc_associate(str, fptr->enc);
}
@@ -1800,7 +1809,7 @@
if (RSTRING_LEN(str) == 0) return Qnil;
}
else if (limit == 0) {
- return rb_enc_str_new(0, 0, fptr->enc);
+ return rb_enc_str_new(0, 0, io_read_encoding(fptr));
}
else if (rs == rb_default_rs) {
return rb_io_getline_fast(fptr, '\n', limit);
@@ -2175,7 +2184,7 @@
GetOpenFile(io, fptr);
rb_io_check_readable(fptr);
- enc = fptr->enc;
+ enc = io_read_encoding(fptr);
READ_CHECK(fptr);
if (io_fillbuf(fptr) < 0) {
return Qnil;
@@ -2327,7 +2336,7 @@
GetOpenFile(io, fptr);
rb_io_check_readable(fptr);
if (NIL_P(c)) return Qnil;
- enc = fptr->enc;
+ enc = io_read_encoding(fptr);
if (FIXNUM_P(c)) {
int cc = FIX2INT(c);
char buf[16];
@@ -5854,7 +5863,7 @@
if (!fptr->enc && fptr->fd == 0) {
fptr->enc = rb_default_external_encoding();
}
- return rb_enc_from_encoding(fptr->enc);
+ return rb_enc_from_encoding(io_read_encoding(fptr));
}
/*
@@ -5872,7 +5881,7 @@
GetOpenFile(io, fptr);
if (!fptr->enc2) return Qnil;
- return rb_enc_from_encoding(fptr->enc);
+ return rb_enc_from_encoding(io_read_encoding(fptr));
}
static VALUE
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml