From 453e38e1fe09f297253038ca33992b93416bea69 Mon Sep 17 00:00:00 2001 From: Tobias Ulmer Date: Tue, 12 Nov 2013 15:46:32 +0100 Subject: [PATCH] Add mkdtemp() wrapper. Signed-off-by: Tobias Ulmer --- generic/le2lib.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/generic/le2lib.c b/generic/le2lib.c index 5c99f30..fc5db04 100644 --- a/generic/le2lib.c +++ b/generic/le2lib.c @@ -756,6 +756,34 @@ do_chmod(lua_State *L) return 1; } +static int +do_mkdtemp(lua_State *L) +{ + const char *template_in = luaL_checkstring(L, 1); + char template[PATH_MAX]; + + if (snprintf(template, PATH_MAX, "%s", template_in) + >= PATH_MAX) { + lua_pushboolean(L, 0); + lua_pushstring(L, "template does not fit in PATH_MAX"); + + return 2; + } + + if (mkdtemp(template) == NULL) { + lua_pushboolean(L, 0); + lua_pushstring(L, strerror(errno)); + + return 2; + } + + lua_pushboolean(L, 1); + lua_pushnil(L); + lua_pushstring(L, template); + + return 3; +} + /* * Hook that gets called once an interrupt has been requested. * Calls e2lib.interrupt_hook() to deal with any cleanup that might be required. @@ -807,6 +835,7 @@ static luaL_Reg lib[] = { { "hardlink", do_hardlink }, { "kill", do_kill }, { "mkdir", do_mkdir }, + { "mkdtemp", do_mkdtemp }, { "parse_mode", do_parse_mode }, { "poll", poll_fd }, { "rmdir", do_rmdir }, -- 2.39.5