summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-23 07:20:39 (GMT)
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-23 07:20:39 (GMT)
commit2e8ce8899a3ff262f2c3eb44f98af69500c4cf11 (patch)
tree550b1f09d4888ee8793b7a550f877a6e5dcdeca7 /time.c
parent87c8901d6915ecdb6d2807d770c13aa41719e875 (diff)
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
Diffstat (limited to 'time.c')
-rw-r--r--time.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/time.c b/time.c
index b8c68d6..a09f960 100644
--- a/time.c
+++ b/time.c
@@ -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;
}