aboutsummaryrefslogtreecommitdiffstats
path: root/time.c
diff options
context:
space:
mode:
Diffstat (limited to 'time.c')
-rw-r--r--time.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/time.c b/time.c
index a1980d07d0..42ce9863ee 100644
--- a/time.c
+++ b/time.c
@@ -1670,12 +1670,11 @@ time_to_a(VALUE time)
#define SMALLBUF 100
static int
-rb_strftime(char ** volatile buf,
- char * volatile format,
- struct tm * volatile time)
+rb_strftime(char **buf,
+ const char *format,
+ struct tm *time)
{
- volatile int size;
- int len, flen;
+ int size, len, flen;
(*buf)[0] = '\0';
flen = strlen(format);
@@ -1746,8 +1745,8 @@ static VALUE
time_strftime(VALUE time, VALUE format)
{
struct time_object *tobj;
- char buffer[SMALLBUF];
- char *fmt, *buf = buffer;
+ char buffer[SMALLBUF], *buf = buffer;
+ const char *fmt;
long len;
VALUE str;
@@ -1764,19 +1763,19 @@ time_strftime(VALUE time, VALUE format)
}
else if (strlen(fmt) < len) {
/* Ruby string may contain \0's. */
- char *p = fmt, *pe = fmt + len;
+ const char *p = fmt, *pe = fmt + len;
str = rb_str_new(0, 0);
while (p < pe) {
len = rb_strftime(&buf, p, &tobj->tm);
rb_str_cat(str, buf, len);
p += strlen(p) + 1;
- if (p <= pe)
- rb_str_cat(str, "\0", 1);
if (buf != buffer) {
free(buf);
buf = buffer;
}
+ for (fmt = p; p < pe && !*p; ++p);
+ if (p > fmt) rb_str_cat(str, fmt, p - fmt);
}
return str;
}