#include "runner.h" #include "tier0/platform.h" #include "tier1/utlstring.h" #include "tier1/utlvector.h" #include "unistd.h" #include "sys/wait.h" #include "tier1/commandline.h" CUtlVector g_processes; int IRunner::Run(CUtlString szName, CUtlVector& args) { pid_t pid = fork(); if (pid < 0) Plat_FatalErrorFunc("Failed to fork"); /* child */ if (pid == 0) { CUtlVector execargs; execargs.AppendTail(szName); if (ICommandLine::CheckParam("-fpcdebug")) V_printf("%s",szName.GetString()); for (auto &arg: args) { execargs.AppendTail(arg); if (ICommandLine::CheckParam("-fpcdebug")) V_printf(" %s",arg.GetString()); } if (ICommandLine::CheckParam("-fpcdebug")) V_printf("\n"); execargs.AppendTail(0); if ( execvp(szName, (char *const*)execargs.GetData()) == -1 ) { V_printf("Failed to launch %s\n",szName.GetString()); _exit(0); } } g_processes.AppendTail(pid); return 0; } int IRunner::Run(CUtlString szName, CUtlString szDirectory, CUtlVector& args) { pid_t pid = fork(); if (pid < 0) Plat_FatalErrorFunc("Failed to fork"); /* child */ if (pid == 0) { CUtlVector execargs; execargs.AppendTail(szName); for (auto &arg: args) { execargs.AppendTail(arg); } execargs.AppendTail(0); chdir(szDirectory.GetString()); if ( execvp(szName, (char *const*)execargs.GetData()) == -1 ) { V_printf("Failed to launch %s\n",szName.GetString()); _exit(0); } } g_processes.AppendTail(pid); /* parent */ return 0; } int IRunner::Run(CUtlString szName, CUtlString szDirectory, CUtlVector& args, CUtlVector& environment) { } int IRunner::Wait( void ) { for (auto &process: g_processes) { int status; pid_t wpid = waitpid(process, &status, 0); } g_processes = {}; return 0; };