summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-29 08:14:09 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-29 08:14:09 +0000
commit06346d5849d70ebfcd26e8886dfd6b4303154f0b (patch)
tree2b456414ce421612670e620564019368c2b31130 /encoding.c
parent0d9386d123c4331e970c2c60eb8ba2500a39d529 (diff)
* 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.c40
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 */