[前][次][番号順一覧][スレッド一覧]

ruby-changes:13762

From: naruse <ko1@a...>
Date: Thu, 29 Oct 2009 17:14:25 +0900 (JST)
Subject: [ruby-changes:13762] Ruby:r25558 (trunk): * encoding.c (Init_Encoding): set locale and filesystem encindex.

naruse	2009-10-29 17:14:09 +0900 (Thu, 29 Oct 2009)

  New Revision: 25558

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25558

  Log:
    * encoding.c (Init_Encoding): set locale and filesystem encindex.
    
    * ruby.c (process_options): move setting func of filesystem
      encoding to Init_Encoding.

  Modified files:
    trunk/ChangeLog
    trunk/encoding.c
    trunk/ruby.c

Index: encoding.c
===================================================================
--- encoding.c	(revision 25557)
+++ encoding.c	(revision 25558)
@@ -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 @@
     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 @@
     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 */
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25557)
+++ ChangeLog	(revision 25558)
@@ -1,3 +1,10 @@
+Thu Oct 29 15:35:39 2009  NARUSE, Yui  <naruse@r...>
+
+	* encoding.c (Init_Encoding): set locale and filesystem encindex.
+
+	* ruby.c (process_options): move setting func of filesystem
+	  encoding to Init_Encoding.
+
 Thu Oct 29 15:43:25 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* vm_core.h (rb_name_err_mesg_new): added prototype.
Index: ruby.c
===================================================================
--- ruby.c	(revision 25557)
+++ ruby.c	(revision 25558)
@@ -1302,7 +1302,6 @@
     ruby_init_loadpath_safe(opt->safe_level);
     rb_enc_find_index("encdb");
     lenc = rb_locale_encoding();
-    (void)rb_filesystem_encoding();
     rb_enc_associate(rb_progname, lenc);
     parser = rb_parser_new();
     if (opt->dump & DUMP_BIT(yydebug)) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]