diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-22 17:28:20 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-22 17:28:20 +0000 |
commit | e8a71bc8539a71a836036ba9df195b06638c196f (patch) | |
tree | 51fe90515959cb5904c38978983fe84bd60a0540 /io.c | |
parent | b83cbb0c7c873fc3c09a77019ff72f1a9a8d5837 (diff) | |
download | bundler-e8a71bc8539a71a836036ba9df195b06638c196f.tar.gz |
* io.c (rb_io_mode_enc): do not set encoding unless explicitly
specified.
* io.c (rb_io_check_readable): fill fptr->enc by default_external
if it's empty.
* io.c (io_enc_str): fptr->enc is always set for reading IO (by
rb_io_check_readable(fptr)).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 40 |
1 files changed, 17 insertions, 23 deletions
@@ -347,8 +347,10 @@ rb_io_check_readable(rb_io_t *fptr) if (fptr->wbuf_len) { io_fflush(fptr); } - if (!fptr->enc && fptr->fd == 0) { - fptr->enc = rb_default_external_encoding(); + if (!fptr->enc) { + fptr->enc = (fptr->fd == 0) + ? rb_default_external_encoding() + : rb_ascii_encoding(); } } @@ -627,7 +629,7 @@ io_fwrite(VALUE str, rb_io_t *fptr) * the strings encoding then we must transcode before writing. * We must also transcode if two encodings were specified */ - if (fptr->enc && (fptr->enc2 || fptr->enc != rb_enc_get(str))) { + if (fptr->enc) { /* transcode str before output */ /* the methods in transcode.c are static, so call indirectly */ /* Can't use encode! because puts writes a frozen newline */ @@ -1298,18 +1300,16 @@ static VALUE io_enc_str(VALUE str, rb_io_t *fptr) { OBJ_TAINT(str); - if (fptr->enc) { - if (fptr->enc2) { - /* two encodings, so transcode from enc2 to enc */ - /* the methods in transcode.c are static, so call indirectly */ - str = rb_funcall(str, id_encode, 2, - rb_enc_from_encoding(fptr->enc2), - rb_enc_from_encoding(fptr->enc)); - } - else { - /* just one encoding, so associate it with the string */ - rb_enc_associate(str, fptr->enc); - } + if (fptr->enc2) { + /* two encodings, so transcode from enc2 to enc */ + /* the methods in transcode.c are static, so call indirectly */ + str = rb_funcall(str, id_encode, 2, + rb_enc_from_encoding(fptr->enc2), + rb_enc_from_encoding(fptr->enc)); + } + else { + /* just one encoding, so associate it with the string */ + rb_enc_associate(str, fptr->enc); } return str; } @@ -2175,7 +2175,7 @@ rb_io_getc(VALUE io) GetOpenFile(io, fptr); rb_io_check_readable(fptr); - enc = fptr->enc ? fptr->enc : rb_default_external_encoding(); + enc = fptr->enc; READ_CHECK(fptr); if (io_fillbuf(fptr) < 0) { return Qnil; @@ -2327,7 +2327,7 @@ rb_io_ungetc(VALUE io, VALUE c) GetOpenFile(io, fptr); rb_io_check_readable(fptr); if (NIL_P(c)) return Qnil; - enc = fptr->enc ? fptr->enc : rb_default_external_encoding(); + enc = fptr->enc; if (FIXNUM_P(c)) { int cc = FIX2INT(c); char buf[16]; @@ -3123,12 +3123,6 @@ rb_io_mode_enc(rb_io_t *fptr, const char *mode) } } } - else if (fptr->mode & FMODE_BINMODE) { - fptr->enc = rb_ascii_encoding(); - } - else { - fptr->enc = rb_default_external_encoding(); - } } struct sysopen_struct { |