summaryrefslogtreecommitdiff
path: root/execute.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2021-08-28 18:59:29 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2021-08-28 18:59:29 +0200
commit5da56616cccf4e595ec6a556cf1aef40b37746e3 (patch)
tree8142e294a251ca2ab1697f7541fe67dfd31622e0 /execute.cc
parent0597cb9854d66d918762ff167148516b69c02e9a (diff)
Move sources to ... well, src ;)
Diffstat (limited to 'execute.cc')
-rw-r--r--execute.cc87
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;
-}