Ejemplo n.º 1
0
static int l_posix_spawnattr_getflags(lua_State *L) {
	int r;
	posix_spawnattr_t *attr = luaL_checkudata(L, 1, "posix_spawnattr_t");
	short int flags;
	if (0 != (r = posix_spawnattr_getflags(attr, &flags))) {
		lua_pushnil(L);
		lua_pushstring(L, strerror(r));
		lua_pushinteger(L, r);
		return 3;
	}
	lua_createtable(L, 0, 7);
	lua_pushboolean(L, flags & POSIX_SPAWN_RESETIDS);
	lua_setfield(L, -2, "resetids");
	lua_pushboolean(L, flags & POSIX_SPAWN_SETPGROUP);
	lua_setfield(L, -2, "setpgroup");
	lua_pushboolean(L, flags & POSIX_SPAWN_SETSIGDEF);
	lua_setfield(L, -2, "setsigdef");
	lua_pushboolean(L, flags & POSIX_SPAWN_SETSIGMASK);
	lua_setfield(L, -2, "setsigmask");
	lua_pushboolean(L, flags & POSIX_SPAWN_SETSCHEDPARAM);
	lua_setfield(L, -2, "setschedparam");
	lua_pushboolean(L, flags & POSIX_SPAWN_SETSCHEDULER);
	lua_setfield(L, -2, "setscheduler");
#ifdef POSIX_SPAWN_USEVFORK
	lua_pushboolean(L, flags & POSIX_SPAWN_USEVFORK);
	lua_setfield(L, -2, "usevfork");
#endif
	return 1;
}
Ejemplo n.º 2
0
TEST(spawn, posix_spawnattr_setflags_posix_spawnattr_getflags) {
  posix_spawnattr_t sa;
  ASSERT_EQ(0, posix_spawnattr_init(&sa));

  ASSERT_EQ(0, posix_spawnattr_setflags(&sa, POSIX_SPAWN_RESETIDS));
  short flags;
  ASSERT_EQ(0, posix_spawnattr_getflags(&sa, &flags));
  ASSERT_EQ(POSIX_SPAWN_RESETIDS, flags);

  constexpr short all_flags = POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_SETSIGDEF |
                              POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSCHEDPARAM |
                              POSIX_SPAWN_SETSCHEDULER | POSIX_SPAWN_USEVFORK | POSIX_SPAWN_SETSID;
  ASSERT_EQ(0, posix_spawnattr_setflags(&sa, all_flags));
  ASSERT_EQ(0, posix_spawnattr_getflags(&sa, &flags));
  ASSERT_EQ(all_flags, flags);

  ASSERT_EQ(0, posix_spawnattr_destroy(&sa));
}
Ejemplo n.º 3
0
void ChildProcess::Options::setFlags(short flags) {
  short currentFlags;
  auto err = posix_spawnattr_getflags(&inner_->attr, &currentFlags);
  if (err) {
    throw std::system_error(
        err, std::generic_category(), "posix_spawnattr_getflags");
  }
  err = posix_spawnattr_setflags(&inner_->attr, currentFlags | flags);
  if (err) {
    throw std::system_error(
        err, std::generic_category(), "posix_spawnattr_setflags");
  }
}
Ejemplo n.º 4
0
static int l_posix_spawnattr_getflags(lua_State *L) {
	int r;
	size_t i;
	posix_spawnattr_t *attr = luaL_checkudata(L, 1, "posix_spawnattr_t");
	short int flags;
	if (0 != (r = posix_spawnattr_getflags(attr, &flags))) {
		lua_pushnil(L);
		lua_pushstring(L, strerror(r));
		lua_pushinteger(L, r);
		return 3;
	}
	lua_createtable(L, 0, N_SUPPORTED_FLAGS);
	for (i=0; i<N_SUPPORTED_FLAGS; i++) {
		lua_pushboolean(L, flags & supported_flags[i].value);
		lua_setfield(L, -2, supported_flags[i].flagname);
	}
	return 1;
}
Ejemplo n.º 5
0
static void tc_libc_spawn_posix_spawnattr_setgetflags(void)
{
	int ret_chk = ERROR;
	pid_t pid;
	posix_spawnattr_t st_attr;
	short int flags;

	ret_chk = posix_spawnattr_init(&st_attr);
	TC_ASSERT_EQ("posix_spawnattr_init", ret_chk, OK);

	ret_chk = posix_spawnattr_setflags(&st_attr, POSIX_SPAWN_SETSCHEDPARAM);
	TC_ASSERT_EQ("posix_spawnattr_setflags", ret_chk, OK);

	ret_chk = task_spawn(&pid, "spawn_flag", function_name_spawn, NULL, &st_attr, (char *const *)NULL, (char *const *)NULL);
	sleep(SEC_3);
	TC_ASSERT_EQ("task_spawn", ret_chk, OK);

	ret_chk = posix_spawnattr_getflags(&st_attr, &flags);
	TC_ASSERT_EQ("posix_spawnattr_getflags", ret_chk, OK);
	TC_ASSERT_EQ("posix_spawnattr_getflags", flags, POSIX_SPAWN_SETSCHEDPARAM);

	TC_SUCCESS_RESULT();
}