aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-18 07:55:04 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-18 07:55:04 +0000
commit43a3aa5ebf64d78150621de03cb9d5bb45cc1139 (patch)
tree585538575589d088c3ddc90029c282c97906a420
parent8372c16764acdfae376e4ff6af9bb8a6f468d88e (diff)
downloadruby-43a3aa5ebf64d78150621de03cb9d5bb45cc1139.tar.gz
* io.c (mode_enc): modify enc and enc2 consistently.
(io_set_encoding): ditto. (io_encoding_set): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--io.c9
2 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8d659e8dad..be1fe85984 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Aug 18 16:54:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (mode_enc): modify enc and enc2 consistently.
+ (io_set_encoding): ditto.
+ (io_encoding_set): ditto.
+
Mon Aug 18 13:21:38 2008 Tanaka Akira <akr@fsij.org>
* transcode.c (transcode_search_path): prevent infinite loop by
diff --git a/io.c b/io.c
index bfd7afda12..18eefb2474 100644
--- a/io.c
+++ b/io.c
@@ -3527,6 +3527,9 @@ mode_enc(rb_io_t *fptr, const char *estr)
/* parse estr as "enc" or "enc2:enc" */
+ fptr->enc = 0;
+ fptr->enc2 = 0;
+
p0 = strrchr(estr, ':');
if (!p0) p1 = estr;
else p1 = p0 + 1;
@@ -3538,7 +3541,7 @@ mode_enc(rb_io_t *fptr, const char *estr)
rb_warn("Unsupported encoding %s ignored", p1);
}
- if (p0) {
+ if (fptr->enc && p0) {
int n = p0 - estr;
if (n > ENCODING_MAXNAMELEN) {
idx2 = -1;
@@ -4253,6 +4256,8 @@ io_set_encoding(VALUE io, VALUE opt)
if (!NIL_P(extenc)) {
rb_encoding *extencoding = rb_to_encoding(extenc);
GetOpenFile(io, fptr);
+ fptr->enc = 0;
+ fptr->enc2 = 0;
if (!NIL_P(encoding)) {
rb_warn("Ignoring encoding parameter '%s': external_encoding is used",
RSTRING_PTR(encoding));
@@ -6330,6 +6335,7 @@ io_encoding_set(rb_io_t *fptr, int argc, VALUE v1, VALUE v2)
else if (argc == 1) {
if (NIL_P(v1)) {
fptr->enc = 0;
+ fptr->enc2 = 0;
}
else {
VALUE tmp = rb_check_string_type(v1);
@@ -6338,6 +6344,7 @@ io_encoding_set(rb_io_t *fptr, int argc, VALUE v1, VALUE v2)
}
else {
fptr->enc = rb_to_encoding(v1);
+ fptr->enc2 = 0;
}
}
}