示例#1
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnattr_setsigdefault(__darwin_posix_spawnattr_t* attr, const __darwin_sigset_t* sigdefault)
{
	sigset_t ns;
	ns = Darling::sigsetDarwinToLinux(sigdefault);

	return AutoErrnoPosix(posix_spawnattr_setsigdefault, attr->native, &ns);
}
示例#2
0
文件: spawn.cpp 项目: MSylvia/darling
int __darwin_posix_spawnattr_setsigmask(__darwin_posix_spawnattr_t* attr, const __darwin_sigset_t* sigmask)
{
	sigset_t ns;
	ns = Darling::sigsetDarwinToLinux(sigmask);

	return AutoErrnoPosix(posix_spawnattr_setsigmask, attr ? attr->native : nullptr, &ns);
}
示例#3
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnattr_getsigmask(const __darwin_posix_spawnattr_t* attr, __darwin_sigset_t* sigmask)
{
	sigset_t ns;
	int err = AutoErrnoPosix(posix_spawnattr_getsigmask, attr->native, &ns);

	if (!err)
		*sigmask = Darling::sigsetLinuxToDarwin(&ns);

	return err;
}
示例#4
0
文件: spawn.cpp 项目: MSylvia/darling
int __darwin_posix_spawnattr_getsigdefault(const __darwin_posix_spawnattr_t* attr, __darwin_sigset_t* sigdefault)
{
	sigset_t ns;
	int err = AutoErrnoPosix(posix_spawnattr_getsigdefault, attr ? attr->native : nullptr, &ns);

	if (!err)
		*sigdefault = Darling::sigsetLinuxToDarwin(&ns);

	return err;
}
示例#5
0
文件: spawn.cpp 项目: CLavina/darling
template<typename NativeDestroy, typename T> int GenericDestroy(T* t, NativeDestroy nativeDestroy)
{
	if (t != nullptr)
	{
		int err = AutoErrnoPosix(nativeDestroy, t->native);
		delete t->native;
		return err;
	}
	else
		return DARWIN_EINVAL;
}
示例#6
0
文件: spawn.cpp 项目: CLavina/darling
template<typename NativeInit, typename T> int GenericInit(T* t, NativeInit nativeInit)
{
	int err;

	if (!t)
		return DARWIN_EINVAL;

	t->native = new typename std::remove_reference<decltype(*t->native)>::type;
	err = AutoErrnoPosix(nativeInit, t->native);

	if (err)
		delete t->native;
	return err;
}
示例#7
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawn(pid_t* pid, const char* path, const __darwin_posix_spawn_file_actions_t* file_actions, const __darwin_posix_spawnattr_t* attrp,
		        char* const argv[], char* const envp[])
{
	TRACE6(pid, path, file_actions, attrp, argv, envp);
	char* const* argv_copy = nullptr;
	int err;

	path = translatePathCI(path);

	if (MachO::isMachO(path))
		argv = argv_copy = Darling::prependLoaderPath(argv, path);	

	err = AutoErrnoPosix(posix_spawn, pid, path, file_actions->native, attrp->native, argv, envp);

	delete [] argv_copy;
	return err;
}
示例#8
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnp(pid_t* pid, const char* file, const __darwin_posix_spawn_file_actions_t* file_actions,const __darwin_posix_spawnattr_t* attrp,
		        char* const argv[], char* const envp[])
{
	TRACE6(pid, file, file_actions, attrp, argv, envp);
	char* const* argv_copy = nullptr;
	int err;

	const char* path = Darling::findInPath(file);
	if (!path)
		return DARWIN_ENOENT;

	if (MachO::isMachO(path))
		argv = argv_copy = Darling::prependLoaderPath(argv, path);

	err = AutoErrnoPosix(posix_spawn, pid, path, file_actions->native, attrp->native, argv, envp);

	delete [] argv_copy;
	return err;
}
示例#9
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnattr_setschedparam(__darwin_posix_spawnattr_t* attr, const struct sched_param* schedparam)
{
	return AutoErrnoPosix(posix_spawnattr_setschedparam, attr->native, schedparam);
}
示例#10
0
文件: spawn.cpp 项目: MSylvia/darling
int __darwin_posix_spawnattr_getpgroup(const __darwin_posix_spawnattr_t* attr, pid_t* pgroup)
{
	return AutoErrnoPosix(posix_spawnattr_getpgroup, attr ? attr->native : nullptr, pgroup);
}
示例#11
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawn_file_actions_adddup2(__darwin_posix_spawn_file_actions_t* file_actions, int filedes, int newfiledes)
{
	return AutoErrnoPosix(posix_spawn_file_actions_adddup2, file_actions->native, filedes, newfiledes);
}
示例#12
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawn_file_actions_addopen(__darwin_posix_spawn_file_actions_t* file_actions, int filedes, const char* path, int oflag, mode_t mode)
{
	return AutoErrnoPosix(posix_spawn_file_actions_addopen, file_actions->native, filedes, translatePathCI(path), Darling::openflagsDarwinToNative(oflag), mode);
}
示例#13
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawn_file_actions_addclose(__darwin_posix_spawn_file_actions_t* file_actions, int filedes)
{
	return AutoErrnoPosix(posix_spawn_file_actions_addclose, file_actions->native, filedes);
}
示例#14
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnattr_setschedpolicy(__darwin_posix_spawnattr_t *attr, int schedpolicy)
{
	return AutoErrnoPosix(posix_spawnattr_setschedpolicy, attr->native, schedpolicy);
}
示例#15
0
文件: spawn.cpp 项目: MSylvia/darling
// flag values are compatible
int __darwin_posix_spawnattr_getflags(const __darwin_posix_spawnattr_t* attr, short* flags)
{
	return AutoErrnoPosix(posix_spawnattr_getflags, attr ? attr->native : nullptr, flags);
}
示例#16
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnattr_setpgroup(__darwin_posix_spawnattr_t *attr, pid_t pgroup)
{
	return AutoErrnoPosix(posix_spawnattr_setpgroup, attr->native, pgroup);
}
示例#17
0
文件: spawn.cpp 项目: CLavina/darling
int __darwin_posix_spawnattr_setflags(__darwin_posix_spawnattr_t* attr, short flags)
{
	return AutoErrnoPosix(posix_spawnattr_setflags, attr->native, flags);
}
示例#18
0
文件: spawn.cpp 项目: MSylvia/darling
int __darwin_posix_spawnattr_getschedpolicy(const __darwin_posix_spawnattr_t* attr, int* schedpolicy)
{
	return AutoErrnoPosix(posix_spawnattr_getschedpolicy, attr ? attr->native : nullptr, schedpolicy);
}
示例#19
0
文件: spawn.cpp 项目: MSylvia/darling
int __darwin_posix_spawnattr_getschedparam(const __darwin_posix_spawnattr_t* attr, struct sched_param* schedparam)
{
	return AutoErrnoPosix(posix_spawnattr_getschedparam, attr ? attr->native : nullptr, schedparam);
}