FbRun.cc: Fix on windows where there is no fork
Ryan Pavlik rpavlik@iastate.edu
1 files changed,
25 insertions(+),
0 deletions(-)
jump to
M
util/fbrun/FbRun.cc
→
util/fbrun/FbRun.cc
@@ -47,6 +47,10 @@ #include <iterator>
#include <fstream> #include <algorithm> +#ifdef _WIN32 +#include <cstring> +#endif + using std::cerr; using std::endl; using std::string;@@ -122,6 +126,7 @@ hide();
return; } +#ifdef HAVE_FORK // fork and execute program if (!fork()) {@@ -133,6 +138,26 @@ setsid();
execl(shell, shell, "-c", command.c_str(), static_cast<void*>(NULL)); exit(0); //exit child } +#elif defined(_WIN32) + /// @todo - unduplicate from FbCommands.cc +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + char comspec[PATH_MAX] = {0}; + char * env_var = getenv("COMSPEC"); + if (env_var != NULL) { + strncpy(comspec, env_var, PATH_MAX - 1); + comspec[PATH_MAX - 1] = '\0'; + } else { + strncpy(comspec, "cmd.exe", 7); + comspec[7] = '\0'; + } + + spawnlp(P_NOWAIT, comspec, comspec, "/c", command.c_str(), static_cast<void*>(NULL)); + +#else +#error "Can't build FbRun - don't know how to launch without fork on your platform" +#endif hide(); // hide gui