diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-08-28 18:59:29 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-08-28 18:59:29 +0200 |
commit | 5da56616cccf4e595ec6a556cf1aef40b37746e3 (patch) | |
tree | 8142e294a251ca2ab1697f7541fe67dfd31622e0 /execute.cc | |
parent | 0597cb9854d66d918762ff167148516b69c02e9a (diff) |
Move sources to ... well, src ;)
Diffstat (limited to 'execute.cc')
-rw-r--r-- | execute.cc | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/execute.cc b/execute.cc deleted file mode 100644 index bc4cd5f..0000000 --- a/execute.cc +++ /dev/null @@ -1,87 +0,0 @@ -#include "execute.h" - -#include <unistd.h> -#include <cstring> -#include <sys/types.h> -#include <sys/wait.h> -#include <spawn.h> -#include <iostream> - -/* -https://blog.famzah.net/2009/11/20/a-much-faster-popen-and-system-implementation-for-linux/ -https://github.com/famzah/popen-noshell/commit/1f9eaf4eeef348d1efe0f3c7fe8ab670653cfbb1 -https://blog.famzah.net/2018/12/19/posix_spawn-performance-benchmarks-and-usage-examples/ -https://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork/5207945#5207945 - */ - - -namespace -{ -int parent_waitpid(pid_t pid) -{ - int status; - - if(waitpid(pid, &status, 0) != pid) - { - return 1; - } - - return status; -} -} // namespace :: - -int execute(const std::string& command, - const std::vector<std::string>& args, - bool verbose) -{ - std::vector<const char*> argv; - argv.push_back(command.data()); - for(const auto& arg : args) - { - argv.push_back(arg.data()); - } - argv.push_back(nullptr); - - if(verbose) - { - std::string cmd; - for(const auto& arg : argv) - { - if(arg == nullptr) - { - break; - } - if(!cmd.empty()) - { - cmd += " "; - } - cmd += arg; - } - - std::cout << cmd << "\n"; - } - -#if 1 - auto pid = vfork(); - if(pid == 0) - { - execv(command.data(), (char**)argv.data()); - std::cout << "Could not execute " << command << ": " << - strerror(errno) << "\n"; - _exit(1); // execv only returns if an error occurred - } - auto ret = parent_waitpid(pid); -#elif 0 - pid_t pid; - if(posix_spawn(&pid, command.data(), nullptr, nullptr, - (char**)argv.data(), nullptr)) - { - return 1; - } - auto ret = parent_waitpid(pid); -#else - auto ret = system(cmd.data()); -#endif - - return ret; -} |