summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--encoding.c13
-rw-r--r--internal.h1
-rw-r--r--load.c2
4 files changed, 10 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 397abad6e5..4c764bbb4c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Dec 3 17:13:24 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (load_encoding): use rb_require_internal instead of
+ calling rb_require_safe with protection.
+
Wed Dec 3 16:47:35 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* enc/encinit.c.erb (Init_enc): initialize encdb and transdb
diff --git a/encoding.c b/encoding.c
index a3514dff5e..b90d83a4c6 100644
--- a/encoding.c
+++ b/encoding.c
@@ -629,13 +629,6 @@ rb_enc_registered(const char *name)
return -1;
}
-static VALUE
-require_enc(VALUE enclib)
-{
- int safe = rb_safe_level();
- return rb_require_safe(enclib, safe > 3 ? 3 : safe);
-}
-
static int
load_encoding(const char *name)
{
@@ -643,8 +636,8 @@ load_encoding(const char *name)
VALUE verbose = ruby_verbose;
VALUE debug = ruby_debug;
VALUE errinfo;
- VALUE loaded;
char *s = RSTRING_PTR(enclib) + 4, *e = RSTRING_END(enclib) - 3;
+ int loaded;
int idx;
while (s < e) {
@@ -657,11 +650,11 @@ load_encoding(const char *name)
ruby_verbose = Qfalse;
ruby_debug = Qfalse;
errinfo = rb_errinfo();
- loaded = rb_protect(require_enc, enclib, 0);
+ loaded = rb_require_internal(enclib, rb_safe_level());
ruby_verbose = verbose;
ruby_debug = debug;
rb_set_errinfo(errinfo);
- if (NIL_P(loaded)) return -1;
+ if (loaded < 0 || 1 < 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;
diff --git a/internal.h b/internal.h
index dfd43d5064..df93632769 100644
--- a/internal.h
+++ b/internal.h
@@ -733,6 +733,7 @@ VALUE rb_iseq_method_name(VALUE self);
/* load.c */
VALUE rb_get_load_path(void);
VALUE rb_get_expanded_load_path(void);
+int rb_require_internal(VALUE fname, int safe);
NORETURN(void rb_load_fail(VALUE, const char*));
/* loadpath.c */
diff --git a/load.c b/load.c
index 5036d8bf24..4f1a0c1a78 100644
--- a/load.c
+++ b/load.c
@@ -947,7 +947,7 @@ load_ext(VALUE path)
* <0: not found (LoadError)
* >1: exception
*/
-static int
+int
rb_require_internal(VALUE fname, int safe)
{
volatile int result = -1;