summaryrefslogtreecommitdiffstats
path: root/numeric.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-26 18:18:12 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-26 18:18:12 +0000
commitfdbea29df8a62c5271074b016e51c0aa4706d16e (patch)
tree8c09624354cf32e9ef08b98dd47aa569928a45b0 /numeric.c
parent933566a6c133821f8bcad7d50e8a01d52a871255 (diff)
downloadruby-fdbea29df8a62c5271074b016e51c0aa4706d16e.tar.gz
ruby-fdbea29df8a62c5271074b016e51c0aa4706d16e.tar.xz
ruby-fdbea29df8a62c5271074b016e51c0aa4706d16e.zip
* numeric.c (int_chr): use default_internal encoding as default
destination encoding if set. [ruby-dev:38717] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@23864 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/numeric.c b/numeric.c
index 8435d7f69..f3aa75787 100644
--- a/numeric.c
+++ b/numeric.c
@@ -1945,10 +1945,15 @@ int_chr(int argc, VALUE *argv, VALUE num)
switch (argc) {
case 0:
- if (i < 0 || 0xff < i) {
+ if (i < 0) {
out_of_range:
rb_raise(rb_eRangeError, "%"PRIdVALUE " out of char range", i);
}
+ if (0xff < i) {
+ enc = rb_default_internal_encoding();
+ if (!enc) goto out_of_range;
+ goto decode;
+ }
c = (char)i;
if (i < 0x80) {
return rb_usascii_str_new(&c, 1);
@@ -1964,6 +1969,7 @@ int_chr(int argc, VALUE *argv, VALUE num)
}
enc = rb_to_encoding(argv[0]);
if (!enc) enc = rb_ascii8bit_encoding();
+ decode:
#if SIZEOF_INT < SIZEOF_LONG
if (i > INT_MAX) goto out_of_range;
#endif