Use ChildWrapperFunction type and make casts more explicit

This commit is contained in:
Jacek Galowicz 2023-11-02 15:51:47 +01:00
parent c924147c9d
commit d11d7849f7

View file

@ -168,11 +168,12 @@ void killUser(uid_t uid)
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
using ChildWrapperFunction = std::function<void()>;
/* Wrapper around vfork to prevent the child process from clobbering /* Wrapper around vfork to prevent the child process from clobbering
the caller's stack frame in the parent. */ the caller's stack frame in the parent. */
static pid_t doFork(bool allowVfork, std::function<void()> fun) __attribute__((noinline)); static pid_t doFork(bool allowVfork, ChildWrapperFunction & fun) __attribute__((noinline));
static pid_t doFork(bool allowVfork, std::function<void()> fun) static pid_t doFork(bool allowVfork, ChildWrapperFunction & fun)
{ {
#ifdef __linux__ #ifdef __linux__
pid_t pid = allowVfork ? vfork() : fork(); pid_t pid = allowVfork ? vfork() : fork();
@ -188,8 +189,8 @@ static pid_t doFork(bool allowVfork, std::function<void()> fun)
#if __linux__ #if __linux__
static int childEntry(void * arg) static int childEntry(void * arg)
{ {
auto main = (std::function<void()> *) arg; auto & fun = *reinterpret_cast<ChildWrapperFunction*>(arg);
(*main)(); fun();
return 1; return 1;
} }
#endif #endif