all repos — fluxbox @ 3ca61475fb14e8c082a9d277f0e433d9cb4af9a0

custom fork of the fluxbox windowmanager

FbRun.cc: Fix on windows where there is no fork
Ryan Pavlik rpavlik@iastate.edu
commit

3ca61475fb14e8c082a9d277f0e433d9cb4af9a0

parent

b82999c1ac47b7b559815636f615d0c1ffa5cb56

1 files changed, 25 insertions(+), 0 deletions(-)

jump to
M util/fbrun/FbRun.ccutil/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