aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2019-01-10 12:47:28 +0100
committerMike Pall <mike>2019-01-10 12:47:28 +0100
commitfc63c938b522e147ea728b75f385728bf4a8fc35 (patch)
tree84816815557909de4a3f292c8521e1a373c68553 /src
parentc4f36ce5656e50e4d636dde498e28eb97edfa5fc (diff)
downloadluajit-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.c4
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) {