ruby-changes:16233
From: nobu <ko1@a...>
Date: Tue, 8 Jun 2010 06:05:26 +0900 (JST)
Subject: [ruby-changes:16233] Ruby:r28199 (trunk, ruby_1_9_2): * io.c (parse_mode_enc): set set_by_bom bit.
nobu 2010-06-08 06:04:56 +0900 (Tue, 08 Jun 2010) New Revision: 28199 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28199 Log: * io.c (parse_mode_enc): set set_by_bom bit. [ruby-core:30641] Modified files: branches/ruby_1_9_2/ChangeLog branches/ruby_1_9_2/io.c branches/ruby_1_9_2/test/ruby/test_io_m17n.rb branches/ruby_1_9_2/version.h trunk/ChangeLog trunk/io.c trunk/test/ruby/test_io_m17n.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 28198) +++ ChangeLog (revision 28199) @@ -1,3 +1,7 @@ +Tue Jun 8 06:04:49 2010 Nobuyoshi Nakada <nobu@r...> + + * io.c (parse_mode_enc): set set_by_bom bit. [ruby-core:30641] + Sun Jun 6 22:37:11 2010 Nobuyoshi Nakada <nobu@r...> * string.c (rb_str_buf_cat_escaped_char): get rid of buffer Index: io.c =================================================================== --- io.c (revision 28198) +++ io.c (revision 28199) @@ -4216,7 +4216,7 @@ } static void -parse_mode_enc(const char *estr, rb_encoding **enc_p, rb_encoding **enc2_p) +parse_mode_enc(const char *estr, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p) { const char *p; char encname[ENCODING_MAXNAMELEN+1]; @@ -4232,6 +4232,7 @@ idx = -1; else { if (io_encname_bom_p(estr, len)) { + if (fmode_p) *fmode_p |= FMODE_SETENC_BY_BOM; estr += 4; len -= 4; } @@ -4244,6 +4245,7 @@ else { long len = strlen(estr); if (io_encname_bom_p(estr, len)) { + if (fmode_p) *fmode_p |= FMODE_SETENC_BY_BOM; estr += 4; len -= 4; memcpy(encname, estr, len); @@ -4288,7 +4290,7 @@ { clear_codeconv(fptr); - parse_mode_enc(estr, &fptr->encs.enc, &fptr->encs.enc2); + parse_mode_enc(estr, &fptr->encs.enc, &fptr->encs.enc2, NULL); } static void @@ -4301,7 +4303,7 @@ } int -rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p) +rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p) { VALUE encoding=Qnil, extenc=Qundef, intenc=Qundef, tmp; int extracted = 0; @@ -4351,7 +4353,7 @@ } if (!NIL_P(encoding)) { extracted = 1; - parse_mode_enc(StringValueCStr(encoding), enc_p, enc2_p); + parse_mode_enc(StringValueCStr(encoding), enc_p, enc2_p, fmode_p); } else if (extenc != Qundef || intenc != Qundef) { extracted = 1; @@ -4426,9 +4428,7 @@ p = strchr(p, ':'); if (p) { has_enc = 1; - parse_mode_enc(p+1, &enc, &enc2); - if (io_encname_bom_p(p+1, 0)) - fmode |= FMODE_SETENC_BY_BOM; + parse_mode_enc(p+1, &enc, &enc2, &fmode); } else { rb_encoding *e; @@ -4474,7 +4474,7 @@ } ecflags = rb_econv_prepare_opts(opthash, &ecopts); - if (rb_io_extract_encoding_option(opthash, &enc, &enc2)) { + if (rb_io_extract_encoding_option(opthash, &enc, &enc2, &fmode)) { if (has_enc) { rb_raise(rb_eArgError, "encoding specified twice"); } @@ -4700,7 +4700,7 @@ convconfig_t convconfig; if (p) { - parse_mode_enc(p+1, &convconfig.enc, &convconfig.enc2); + parse_mode_enc(p+1, &convconfig.enc, &convconfig.enc2, &fmode); } else { rb_encoding *e; @@ -7630,7 +7630,7 @@ else { tmp = rb_check_string_type(v1); if (!NIL_P(tmp) && rb_enc_asciicompat(rb_enc_get(tmp))) { - parse_mode_enc(RSTRING_PTR(tmp), &enc, &enc2); + parse_mode_enc(RSTRING_PTR(tmp), &enc, &enc2, NULL); ecflags = rb_econv_prepare_opts(opt, &ecopts); } else { Index: test/ruby/test_io_m17n.rb =================================================================== --- test/ruby/test_io_m17n.rb (revision 28198) +++ test/ruby/test_io_m17n.rb (revision 28199) @@ -1740,6 +1740,10 @@ assert_equal(content[1].force_encoding("ascii-8bit"), result.force_encoding("ascii-8bit")) end + + bug3407 = '[ruby-core:30641]' + result = File.read('UTF-8-bom.txt', encoding: 'BOM|UTF-8') + assert_equal("a", result.force_encoding("ascii-8bit"), bug3407) } end Index: ruby_1_9_2/ChangeLog =================================================================== --- ruby_1_9_2/ChangeLog (revision 28198) +++ ruby_1_9_2/ChangeLog (revision 28199) @@ -1,3 +1,7 @@ +Tue Jun 8 06:04:49 2010 Nobuyoshi Nakada <nobu@r...> + + * io.c (parse_mode_enc): set set_by_bom bit. [ruby-core:30641] + Sun Jun 6 23:35:12 2010 Masaya Tarui <tarui@r...> * gc.c (heaps_slot, assign_heap_slot, gc_sweep): skip sweep if Index: ruby_1_9_2/io.c =================================================================== --- ruby_1_9_2/io.c (revision 28198) +++ ruby_1_9_2/io.c (revision 28199) @@ -4216,7 +4216,7 @@ } static void -parse_mode_enc(const char *estr, rb_encoding **enc_p, rb_encoding **enc2_p) +parse_mode_enc(const char *estr, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p) { const char *p; char encname[ENCODING_MAXNAMELEN+1]; @@ -4232,6 +4232,7 @@ idx = -1; else { if (io_encname_bom_p(estr, len)) { + if (fmode_p) *fmode_p |= FMODE_SETENC_BY_BOM; estr += 4; len -= 4; } @@ -4244,6 +4245,7 @@ else { long len = strlen(estr); if (io_encname_bom_p(estr, len)) { + if (fmode_p) *fmode_p |= FMODE_SETENC_BY_BOM; estr += 4; len -= 4; memcpy(encname, estr, len); @@ -4288,7 +4290,7 @@ { clear_codeconv(fptr); - parse_mode_enc(estr, &fptr->encs.enc, &fptr->encs.enc2); + parse_mode_enc(estr, &fptr->encs.enc, &fptr->encs.enc2, NULL); } static void @@ -4301,7 +4303,7 @@ } int -rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p) +rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p) { VALUE encoding=Qnil, extenc=Qundef, intenc=Qundef, tmp; int extracted = 0; @@ -4351,7 +4353,7 @@ } if (!NIL_P(encoding)) { extracted = 1; - parse_mode_enc(StringValueCStr(encoding), enc_p, enc2_p); + parse_mode_enc(StringValueCStr(encoding), enc_p, enc2_p, fmode_p); } else if (extenc != Qundef || intenc != Qundef) { extracted = 1; @@ -4426,9 +4428,7 @@ p = strchr(p, ':'); if (p) { has_enc = 1; - parse_mode_enc(p+1, &enc, &enc2); - if (io_encname_bom_p(p+1, 0)) - fmode |= FMODE_SETENC_BY_BOM; + parse_mode_enc(p+1, &enc, &enc2, &fmode); } else { rb_encoding *e; @@ -4474,7 +4474,7 @@ } ecflags = rb_econv_prepare_opts(opthash, &ecopts); - if (rb_io_extract_encoding_option(opthash, &enc, &enc2)) { + if (rb_io_extract_encoding_option(opthash, &enc, &enc2, &fmode)) { if (has_enc) { rb_raise(rb_eArgError, "encoding specified twice"); } @@ -4700,7 +4700,7 @@ convconfig_t convconfig; if (p) { - parse_mode_enc(p+1, &convconfig.enc, &convconfig.enc2); + parse_mode_enc(p+1, &convconfig.enc, &convconfig.enc2, &fmode); } else { rb_encoding *e; @@ -7630,7 +7630,7 @@ else { tmp = rb_check_string_type(v1); if (!NIL_P(tmp) && rb_enc_asciicompat(rb_enc_get(tmp))) { - parse_mode_enc(RSTRING_PTR(tmp), &enc, &enc2); + parse_mode_enc(RSTRING_PTR(tmp), &enc, &enc2, NULL); ecflags = rb_econv_prepare_opts(opt, &ecopts); } else { Index: ruby_1_9_2/version.h =================================================================== --- ruby_1_9_2/version.h (revision 28198) +++ ruby_1_9_2/version.h (revision 28199) @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.2" -#define RUBY_RELEASE_DATE "2010-06-06" +#define RUBY_RELEASE_DATE "2010-06-08" #define RUBY_PATCHLEVEL -1 #define RUBY_VERSION_MAJOR 1 @@ -7,7 +7,7 @@ #define RUBY_VERSION_TEENY 1 #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 6 -#define RUBY_RELEASE_DAY 6 +#define RUBY_RELEASE_DAY 8 #include "ruby/version.h" Index: ruby_1_9_2/test/ruby/test_io_m17n.rb =================================================================== --- ruby_1_9_2/test/ruby/test_io_m17n.rb (revision 28198) +++ ruby_1_9_2/test/ruby/test_io_m17n.rb (revision 28199) @@ -1740,6 +1740,10 @@ assert_equal(content[1].force_encoding("ascii-8bit"), result.force_encoding("ascii-8bit")) end + + bug3407 = '[ruby-core:30641]' + result = File.read('UTF-8-bom.txt', encoding: 'BOM|UTF-8') + assert_equal("a", result.force_encoding("ascii-8bit"), bug3407) } end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/