diff options
author | Mike Pall <mike> | 2019-01-10 12:47:28 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2019-01-10 12:47:28 +0100 |
commit | fc63c938b522e147ea728b75f385728bf4a8fc35 (patch) | |
tree | 84816815557909de4a3f292c8521e1a373c68553 /src | |
parent | c4f36ce5656e50e4d636dde498e28eb97edfa5fc (diff) | |
download | luajit-fc63c938b522e147ea728b75f385728bf4a8fc35.tar.gz luajit-fc63c938b522e147ea728b75f385728bf4a8fc35.tar.bz2 luajit-fc63c938b522e147ea728b75f385728bf4a8fc35.zip |
Fix os.date() for wider libc strftime() compatibility.
Thanks to Jesper Lundgren.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib_os.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lib_os.c b/src/lib_os.c index 9e78d49a..ffbc3fdc 100644 --- a/src/lib_os.c +++ b/src/lib_os.c | |||
@@ -205,12 +205,12 @@ LJLIB_CF(os_date) | |||
205 | setboolfield(L, "isdst", stm->tm_isdst); | 205 | setboolfield(L, "isdst", stm->tm_isdst); |
206 | } else if (*s) { | 206 | } else if (*s) { |
207 | SBuf *sb = &G(L)->tmpbuf; | 207 | SBuf *sb = &G(L)->tmpbuf; |
208 | MSize sz = 0; | 208 | MSize sz = 0, retry = 4; |
209 | const char *q; | 209 | const char *q; |
210 | for (q = s; *q; q++) | 210 | for (q = s; *q; q++) |
211 | sz += (*q == '%') ? 30 : 1; /* Overflow doesn't matter. */ | 211 | sz += (*q == '%') ? 30 : 1; /* Overflow doesn't matter. */ |
212 | setsbufL(sb, L); | 212 | setsbufL(sb, L); |
213 | for (;;) { | 213 | while (retry--) { /* Limit growth for invalid format or empty result. */ |
214 | char *buf = lj_buf_need(sb, sz); | 214 | char *buf = lj_buf_need(sb, sz); |
215 | size_t len = strftime(buf, sbufsz(sb), s, stm); | 215 | size_t len = strftime(buf, sbufsz(sb), s, stm); |
216 | if (len) { | 216 | if (len) { |