diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-10-22 01:57:08 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-10-22 01:57:08 +0000 |
commit | 00befb4b3f58f11343ec0e84b76ec7075a84a839 (patch) | |
tree | 28f08bacc38f1d81b78c5659939a72001424f526 /encoding.c | |
parent | b2c81746ace2e7a2ab5433e59b585776d945499a (diff) | |
download | ruby-00befb4b3f58f11343ec0e84b76ec7075a84a839.tar.gz |
* encoding.c (rb_enc_compatible): check if two objects have compatible
encodings.
* encoding.c (enc_compatible_p): added Encoding.compatible?.
* include/ruby/encoding.h (rb_enc_compatible): prototype.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/encoding.c b/encoding.c index 3de7fcf3d3..b1fd2d23d7 100644 --- a/encoding.c +++ b/encoding.c @@ -339,6 +339,15 @@ rb_enc_get(VALUE obj) rb_encoding* rb_enc_check(VALUE str1, VALUE str2) { + rb_encoding *enc = rb_enc_compatible(str1, str2); + if (!enc) + rb_raise(rb_eArgError, "character encodings differ"); + return enc; +} + +rb_encoding* +rb_enc_compatible(VALUE str1, VALUE str2) +{ int idx1, idx2; rb_encoding *enc; @@ -371,7 +380,7 @@ rb_enc_check(VALUE str1, VALUE str2) rb_enc_asciicompat(enc = rb_enc_from_index(idx2))) return enc; } - rb_raise(rb_eArgError, "character encodings differ"); + return 0; } void @@ -510,6 +519,16 @@ enc_find(VALUE klass, VALUE enc) return rb_enc_from_encoding(rb_enc_from_index(idx)); } +static VALUE +enc_compatible_p(VALUE klass, VALUE str1, VALUE str2) +{ + rb_encoding *enc = rb_enc_compatible(str1, str2); + VALUE encoding = Qnil; + if (!enc || !(encoding = rb_enc_from_encoding(enc))) + encoding = Qnil; + return encoding; +} + /* :nodoc: */ static VALUE enc_dump(int argc, VALUE *argv, VALUE self) @@ -621,6 +640,7 @@ Init_Encoding(void) rb_define_method(rb_cEncoding, "name", enc_name, 0); rb_define_singleton_method(rb_cEncoding, "list", enc_list, 0); rb_define_singleton_method(rb_cEncoding, "find", enc_find, 1); + rb_define_singleton_method(rb_cEncoding, "compatible?", enc_compatible_p, 2); rb_define_method(rb_cEncoding, "_dump", enc_dump, -1); rb_define_singleton_method(rb_cEncoding, "_load", enc_load, 1); |