diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-29 08:14:09 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-29 08:14:09 +0000 |
commit | 06346d5849d70ebfcd26e8886dfd6b4303154f0b (patch) | |
tree | 2b456414ce421612670e620564019368c2b31130 /encoding.c | |
parent | 0d9386d123c4331e970c2c60eb8ba2500a39d529 (diff) | |
download | ruby-06346d5849d70ebfcd26e8886dfd6b4303154f0b.tar.gz |
* encoding.c (Init_Encoding): set locale and filesystem encindex.
* ruby.c (process_options): move setting func of filesystem
encoding to Init_Encoding.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/encoding.c b/encoding.c index fa7937ed2b..bd71a61949 100644 --- a/encoding.c +++ b/encoding.c @@ -26,6 +26,7 @@ static ID id_encoding; VALUE rb_cEncoding; static VALUE rb_encoding_list; +static int locale_encindex = -1, filesystem_encindex = -1; struct rb_encoding_entry { const char *name; @@ -1093,53 +1094,47 @@ rb_usascii_encindex(void) return ENCINDEX_US_ASCII; } -static int -rb_locale_encindex(void) +static void +set_locale_encindex(void) { VALUE charmap = rb_locale_charmap(rb_cEncoding); - int idx; if (NIL_P(charmap)) - idx = rb_usascii_encindex(); - else if ((idx = rb_enc_find_index(StringValueCStr(charmap))) < 0) - idx = rb_ascii8bit_encindex(); + locale_encindex = rb_usascii_encindex(); + else if ((locale_encindex = rb_enc_find_index(StringValueCStr(charmap))) < 0) + locale_encindex = rb_ascii8bit_encindex(); - if (rb_enc_registered("locale") < 0) enc_alias_internal("locale", idx); - - return idx; + if (rb_enc_registered("locale") < 0) enc_alias_internal("locale", locale_encindex); } rb_encoding * rb_locale_encoding(void) { - return rb_enc_from_index(rb_locale_encindex()); + return rb_enc_from_index(locale_encindex); } -static int -rb_filesystem_encindex(void) +static void +set_filesystem_encindex(void) { - int idx; #if defined NO_LOCALE_CHARMAP - idx = rb_enc_to_index(rb_default_external_encoding()); + filesystem_encindex = rb_enc_to_index(rb_default_external_encoding()); #elif defined _WIN32 || defined __CYGWIN__ char cp[sizeof(int) * 8 / 3 + 4]; snprintf(cp, sizeof cp, "CP%d", AreFileApisANSI() ? GetACP() : GetOEMCP()); - idx = rb_enc_find_index(cp); + filesystem_encindex = rb_enc_find_index(cp); #elif defined __APPLE__ - idx = rb_utf8_encindex(); + filesystem_encindex = rb_utf8_encindex(); #else - idx = rb_locale_encindex(); + filesystem_encindex = locale_encindex; #endif - if (rb_enc_registered("filesystem") < 0) enc_alias_internal("filesystem", idx); - - return idx; + if (rb_enc_registered("filesystem") < 0) enc_alias_internal("filesystem", filesystem_encindex); } rb_encoding * rb_filesystem_encoding(void) { - return rb_enc_from_index(rb_filesystem_encindex()); + return rb_enc_from_index(filesystem_encindex); } struct default_encoding { @@ -1501,6 +1496,9 @@ Init_Encoding(void) for (i = 0; i < enc_table.count; ++i) { rb_ary_push(list, enc_new(enc_table.list[i].enc)); } + set_locale_encindex(); + set_filesystem_encindex(); + } /* locale insensitive functions */ |