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

ruby-changes:3618

From: ko1@a...
Date: Fri, 18 Jan 2008 12:25:42 +0900 (JST)
Subject: [ruby-changes:3618] nobu - Ruby:r15107 (trunk): * encoding.c (load_encoding): check if successfully loaded.

nobu	2008-01-18 12:25:15 +0900 (Fri, 18 Jan 2008)

  New Revision: 15107

  Modified files:
    trunk/ChangeLog
    trunk/encoding.c

  Log:
    * encoding.c (load_encoding): check if successfully loaded.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15107&r2=15106&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/encoding.c?r1=15107&r2=15106&diff_format=u

Index: encoding.c
===================================================================
--- encoding.c	(revision 15106)
+++ encoding.c	(revision 15107)
@@ -457,7 +457,10 @@
     VALUE enclib = rb_sprintf("enc/%s", name);
     VALUE verbose = ruby_verbose;
     VALUE debug = ruby_debug;
+    VALUE loaded;
     char *s = RSTRING_PTR(enclib) + 4, *e = RSTRING_END(enclib);
+    int idx;
+
     while (s < e) {
 	if (!ISALNUM(*s)) *s = '_';
 	else if (ISUPPER(*s)) *s = TOLOWER(*s);
@@ -466,11 +469,14 @@
     OBJ_FREEZE(enclib);
     ruby_verbose = Qfalse;
     ruby_debug = Qfalse;
-    rb_protect(require_enc, enclib, 0);
+    loaded = rb_protect(require_enc, enclib, 0);
     ruby_verbose = verbose;
     ruby_debug = debug;
     rb_set_errinfo(Qnil);
-    return rb_enc_registered(name);
+    if (NIL_P(loaded)) return -1;
+    if ((idx = rb_enc_registered(name)) < 0) return -1;
+    if (enc_autoload_p(enc_table.list[idx].enc)) return -1;
+    return idx;
 }
 
 int
@@ -487,20 +493,14 @@
 	if (enc_initialized_p(enc) &&
 	    (base = enc_base_encoding(ENC_FROM_ENCODING(enc)), !NIL_P(base))) {
 	    if ((b = enc_check_encoding(base)) < 0) {
-#if 0
-		st_data_t key, val;
-		key = (st_data_t)name;
-		if (st_delete(enc_table.names, &key, &val)) {
-		    if (enc->name != (char *)key) xfree((char *)key);
-		}
-#endif
-		return -1;
+		goto failed;
 	    }
 	    enc_register_at(i, rb_enc_name(enc), rb_enc_from_index(b));
 	}
 	else {
 	    i = load_encoding(rb_enc_name(enc));
-	    if (enc_autoload_p(rb_enc_from_index(i))) {
+	    if (i < 0) {
+	      failed:
 		rb_warn("failed to load encoding (%s); use ASCII-8BIT instead",
 			name);
 		return 0;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15106)
+++ ChangeLog	(revision 15107)
@@ -1,5 +1,7 @@
-Fri Jan 18 11:39:10 2008  Nobuyoshi Nakada  <nobu@r...>
+Fri Jan 18 12:25:13 2008  Nobuyoshi Nakada  <nobu@r...>
 
+	* encoding.c (load_encoding): check if successfully loaded.
+
 	* encoding.c (rb_enc_find_index): use original encoding name to
 	  replicate loaded encoding instead alias.
 

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

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