diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-07-23 07:20:39 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-07-23 07:20:39 +0000 |
commit | 2e8ce8899a3ff262f2c3eb44f98af69500c4cf11 (patch) | |
tree | 550b1f09d4888ee8793b7a550f877a6e5dcdeca7 | |
parent | 87c8901d6915ecdb6d2807d770c13aa41719e875 (diff) | |
download | ruby-2e8ce8899a3ff262f2c3eb44f98af69500c4cf11.tar.gz |
time.c: unnecessary encoding
* time.c (time_zone_name): remove unnecessary encoding and
conversion if it is 7bit-ascii only.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46907 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | test/ruby/test_time.rb | 1 | ||||
-rw-r--r-- | time.c | 17 |
2 files changed, 15 insertions, 3 deletions
diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index 4ed899baf6..bf78bbf8cb 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -520,6 +520,7 @@ class TestTime < Test::Unit::TestCase def assert_zone_encoding(time) zone = time.zone assert_predicate(zone, :valid_encoding?) + return if zone.ascii_only? enc = Encoding.default_internal || Encoding.find('locale') assert_equal(enc, zone.encoding) end @@ -4198,6 +4198,16 @@ time_isdst(VALUE time) return tobj->vtm.isdst ? Qtrue : Qfalse; } +static VALUE +time_zone_name(const char *zone) +{ + VALUE name = rb_str_new_cstr(zone); + if (!rb_enc_str_asciionly_p(name)) { + name = rb_external_str_with_enc(name, rb_locale_encoding()); + } + return name; +} + /* * call-seq: * time.zone -> string @@ -4220,11 +4230,12 @@ time_zone(VALUE time) MAKE_TM(time, tobj); if (TIME_UTC_P(tobj)) { - return rb_obj_untaint(rb_locale_str_new_cstr("UTC")); + return rb_usascii_str_new_cstr("UTC"); } if (tobj->vtm.zone == NULL) return Qnil; - return rb_obj_untaint(rb_locale_str_new_cstr(tobj->vtm.zone)); + + return time_zone_name(tobj->vtm.zone); } /* @@ -4693,7 +4704,7 @@ time_mdump(VALUE time) rb_ivar_set(str, id_offset, off); } if (tobj->vtm.zone) { - rb_ivar_set(str, id_zone, rb_locale_str_new_cstr(tobj->vtm.zone)); + rb_ivar_set(str, id_zone, time_zone_name(tobj->vtm.zone)); } return str; } |