diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-15 09:56:59 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-15 09:56:59 +0000 |
commit | f2bd108d8df6def3ff39674337eb4d40cfb25e3b (patch) | |
tree | 7520d2b73558bb8a6a4973eaf86f861d2c4f3b9b /encoding.c | |
parent | c5851d1d6906e130bbb156d9ace962c59c8b0086 (diff) | |
download | ruby-f2bd108d8df6def3ff39674337eb4d40cfb25e3b.tar.gz |
* configure.in (enc/Makefile): add external encoding objects list.
* common.mk (BUILTIN_ENCOBJS): renamed from ENCOBJS.
* Makefile.in (BUILTIN_ENCOBJS): substitued by autoconf.
* enc/Makefile.in: new file to compile external encoding sources.
* encoding.c (rb_enc_find_index): auto-load external encoding objects
as "ext/ENCODING_NAME". [ruby-dev:32606]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/encoding.c b/encoding.c index b2d9359694..325ee7a73b 100644 --- a/encoding.c +++ b/encoding.c @@ -155,7 +155,7 @@ enc_register(const char *name, rb_encoding *encoding) } static VALUE enc_based_encoding(VALUE); -#define rb_enc_registered(name) rb_enc_find_index(name) +int rb_enc_registered(const char *name); int rb_enc_register(const char *name, rb_encoding *encoding) @@ -252,7 +252,7 @@ rb_enc_from_index(int index) } int -rb_enc_find_index(const char *name) +rb_enc_registered(const char *name) { int i; st_data_t alias = 0; @@ -278,6 +278,26 @@ rb_enc_find_index(const char *name) return -1; } +static VALUE +require_enc(VALUE enclib) +{ + return rb_require_safe(enclib, rb_safe_level()); +} + +int +rb_enc_find_index(const char *name) +{ + int i = rb_enc_registered(name); + if (i < 0) { + VALUE enclib = rb_sprintf("enc/%s", name); + OBJ_FREEZE(enclib); + if (RTEST(rb_protect(require_enc, enclib, 0))) + i = rb_enc_registered(name); + rb_set_errinfo(Qnil); + } + return i; +} + rb_encoding * rb_enc_find(const char *name) { |