diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-18 07:55:04 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-18 07:55:04 +0000 |
commit | 43a3aa5ebf64d78150621de03cb9d5bb45cc1139 (patch) | |
tree | 585538575589d088c3ddc90029c282c97906a420 /io.c | |
parent | 8372c16764acdfae376e4ff6af9bb8a6f468d88e (diff) | |
download | ruby-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
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -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; } } } |