Browse Source

process cleanup.

merge-requests/365/head
U-olece-PC\olece 10 years ago
parent
commit
b76a2f1c64
  1. 3
      src/process_unix.cpp
  2. 17
      src/process_win.cpp

3
src/process_unix.cpp

@ -68,8 +68,7 @@ Process::id_type Process::open(const std::string &command, const std::string &pa
else else
execl("/bin/sh", "sh", "-c", command.c_str(), NULL); execl("/bin/sh", "sh", "-c", command.c_str(), NULL);
perror("execl"); _exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
} }
if(stdin_fd) close(stdin_p[0]); if(stdin_fd) close(stdin_p[0]);

17
src/process_win.cpp

@ -1,6 +1,7 @@
#include "process.hpp" #include "process.hpp"
#include <cstring> #include <cstring>
#include "TlHelp32.h" #include "TlHelp32.h"
#include <algorithm>
#include <iostream> //TODO: remove #include <iostream> //TODO: remove
using namespace std; //TODO: remove using namespace std; //TODO: remove
@ -96,19 +97,13 @@ Process::id_type Process::open(const std::string &command, const std::string &pa
#ifdef MSYS_PROCESS_USE_SH #ifdef MSYS_PROCESS_USE_SH
size_t pos=0; size_t pos=0;
std::string sh_command=command; std::string sh_command=command;
while((pos=sh_command.find('\"', pos))!=std::string::npos) { while((pos=sh_command.find('\\', pos))!=std::string::npos) {
if(pos>0 && sh_command[pos-1]!='\\') { sh_command.replace(pos, 1, "\\\\\\\\");
sh_command.replace(pos, 1, "\\\""); pos+=4;
pos++;
}
pos++;
} }
pos=0; pos=0;
while((pos=sh_command.find('\\', pos))!=std::string::npos) { while((pos=sh_command.find('\"', pos))!=std::string::npos) {
if((pos+1)==sh_command.size() || sh_command[pos+1]!='\"') { sh_command.replace(pos, 1, "\\\"");
sh_command.replace(pos, 1, "\\\\\\");
pos++;
}
pos+=2; pos+=2;
} }
sh_command.insert(0, "sh -c \""); sh_command.insert(0, "sh -c \"");

Loading…
Cancel
Save