bug: os.date throws error when result is the empty string

This commit is contained in:
Roberto Ierusalimschy 2006-09-19 10:57:08 -03:00
parent 93d3c8450c
commit d513c3c66b
2 changed files with 26 additions and 6 deletions

9
bugs
View File

@ -1142,6 +1142,15 @@ patch = [[
}
Bug{
what = [[os.date throws an error when result is the empty string]],
report = [[ ]],
since = [[4.0]],
example = [[print(os.date(""))]],
patch = [[ ]],
}
Bug{
what = [[ ]],
report = [[ ]],

View File

@ -1,5 +1,5 @@
/*
** $Id: loslib.c,v 1.18 2006/03/09 18:08:22 roberto Exp roberto $
** $Id: loslib.c,v 1.19 2006/04/26 18:19:49 roberto Exp roberto $
** Standard Operating System library
** See Copyright Notice in lua.h
*/
@ -146,11 +146,22 @@ static int os_date (lua_State *L) {
setboolfield(L, "isdst", stm->tm_isdst);
}
else {
char b[256];
if (strftime(b, sizeof(b), s, stm))
lua_pushstring(L, b);
else
return luaL_error(L, LUA_QL("date") " format too long");
char cc[3];
luaL_Buffer b;
cc[0] = '%'; cc[2] = '\0';
luaL_buffinit(L, &b);
for (; *s; s++) {
if (*s != '%' || *(s + 1) == '\0') /* no conversion specifier? */
luaL_addchar(&b, *s);
else {
size_t reslen;
char buff[200]; /* should be big enough for any conversion result */
cc[1] = *(++s);
reslen = strftime(buff, sizeof(buff), cc, stm);
luaL_addlstring(&b, buff, reslen);
}
}
luaL_pushresult(&b);
}
return 1;
}