summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-13 01:02:36 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-13 01:02:36 +0000
commit33f6ae913a8f46d3c2415b41508911c80d3f27a7 (patch)
tree43eb26e861c04cecabf11f5a3f8c0969c5376232 /encoding.c
parentfeff0bd161ce120f68794c9bad85e4582db47173 (diff)
merges r20624 from trunk into ruby_1_9_1.
* encoding.c (rb_enc_set_default_internal): defines internal encoding as nil. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r--encoding.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/encoding.c b/encoding.c
index d92a925aa0..eb52f83759 100644
--- a/encoding.c
+++ b/encoding.c
@@ -38,6 +38,7 @@ static struct {
void rb_enc_init(void);
#define ENCODING_COUNT ENCINDEX_BUILTIN_MAX
+#define UNSPECIFIED_ENCODING INT_MAX
#define enc_autoload_p(enc) (!rb_enc_mbmaxlen(enc))
@@ -507,7 +508,12 @@ rb_enc_find_index(const char *name)
if (i < 0) {
i = load_encoding(name);
}
- else if (enc_autoload_p(enc = rb_enc_from_index(i))) {
+ else if (!(enc = rb_enc_from_index(i))) {
+ if (i != UNSPECIFIED_ENCODING) {
+ rb_raise(rb_eArgError, "encoding %s is not registered", name);
+ }
+ }
+ else if (enc_autoload_p(enc)) {
if (enc_autoload(enc) < 0) {
rb_warn("failed to load encoding (%s); use ASCII-8BIT instead",
name);
@@ -1111,6 +1117,8 @@ rb_enc_set_default_internal(VALUE encoding)
if (NIL_P(encoding)) {
default_internal_index = -1;
default_internal = 0;
+ st_insert(enc_table.names, (st_data_t)strdup("internal"),
+ (st_data_t)UNSPECIFIED_ENCODING);
return;
}