atf_error_t atf_fs_mkdtemp(atf_fs_path_t *p) { atf_error_t err; char *buf; if (!check_umask(S_IRWXU, S_IRWXU)) { err = invalid_umask_error(p, atf_fs_stat_dir_type, current_umask()); goto out; } err = copy_contents(p, &buf); if (atf_is_error(err)) goto out; err = do_mkdtemp(buf); if (atf_is_error(err)) goto out_buf; replace_contents(p, buf); INV(!atf_is_error(err)); out_buf: free(buf); out: return err; }
static int os_tmpdir(lua_State * L) { char *s, *tempdir; const char *tmp = luaL_optstring(L, 1, "luatex.XXXXXX"); if (tmp == NULL || strlen(tmp) < 6 || (strcmp(tmp + strlen(tmp) - 6, "XXXXXX") != 0)) { lua_pushnil(L); lua_pushstring(L, "Invalid argument to os.tmpdir()"); return 2; } else { tempdir = xstrdup(tmp); } #ifdef HAVE_MKDTEMP s = mkdtemp(tempdir); #else s = do_mkdtemp(tempdir); #endif if (s == NULL) { int en = errno; /* calls to Lua API may change this value */ lua_pushnil(L); lua_pushfstring(L, "%s", strerror(en)); return 2; } else { lua_pushstring(L, s); return 1; } }