FbRun.cc: Fix on windows where there is no fork

This commit is contained in:
Ryan Pavlik 2011-10-28 14:07:49 -05:00
parent b82999c1ac
commit 3ca61475fb

View file

@ -47,6 +47,10 @@
#include <fstream> #include <fstream>
#include <algorithm> #include <algorithm>
#ifdef _WIN32
#include <cstring>
#endif
using std::cerr; using std::cerr;
using std::endl; using std::endl;
using std::string; using std::string;
@ -122,6 +126,7 @@ void FbRun::run(const std::string &command) {
return; return;
} }
#ifdef HAVE_FORK
// fork and execute program // fork and execute program
if (!fork()) { if (!fork()) {
@ -133,6 +138,26 @@ void FbRun::run(const std::string &command) {
execl(shell, shell, "-c", command.c_str(), static_cast<void*>(NULL)); execl(shell, shell, "-c", command.c_str(), static_cast<void*>(NULL));
exit(0); //exit child 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 hide(); // hide gui