TEST(spawn, posix_spawnattr_setsigdefault_posix_spawnattr_getsigdefault) { posix_spawnattr_t sa; ASSERT_EQ(0, posix_spawnattr_init(&sa)); sigset_t sigs; ASSERT_EQ(0, posix_spawnattr_getsigdefault(&sa, &sigs)); ASSERT_FALSE(sigismember(&sigs, SIGALRM)); sigset_t just_SIGALRM; sigemptyset(&just_SIGALRM); sigaddset(&just_SIGALRM, SIGALRM); ASSERT_EQ(0, posix_spawnattr_setsigdefault(&sa, &just_SIGALRM)); ASSERT_EQ(0, posix_spawnattr_getsigdefault(&sa, &sigs)); ASSERT_TRUE(sigismember(&sigs, SIGALRM)); ASSERT_EQ(0, posix_spawnattr_destroy(&sa)); }
static int l_posix_spawnattr_getsigdefault(lua_State *L) { int r; posix_spawnattr_t *attr = luaL_checkudata(L, 1, "posix_spawnattr_t"); sigset_t *set = luaL_testudata(L, 2, "sigset_t"); if (set) { lua_settop(L, 2); } else { lua_settop(L, 1); set = lua_newuserdata(L, sizeof(sigset_t)); luaL_setmetatable(L, "sigset_t"); } if (0 != (r = posix_spawnattr_getsigdefault(attr, set))) { lua_pushnil(L); lua_pushstring(L, strerror(r)); lua_pushinteger(L, r); return 3; } return 1; }