44 std::string command =
"";
45 for (
int i = 0; argv[i]; ++i) {
46 if (i > 0) command +=
" ";
62 std::string environment =
"";
63 for (
int i = 0; envp[i]; ++i) {
64 if (i > 0) environment +=
"; ";
65 environment += envp[i];
85 std::vector<std::string>
88 std::list<std::tuple<std::string, std::string, bool>> path_ext_m;
89 for (
size_t i = 0; path_ext[i] && path_ext[i+1]; i += 2) {
90 std::string match = std::string(path_ext[i]) +
"=";
91 path_ext_m.push_back(std::make_tuple(match, std::string(path_ext[i+1]),
false));
94 unsigned int extra_ent = 0;
96 size_t environ_length = 0;
97 for (
size_t i = 0; environ[i]; ++i) {
99 std::string ev = environ[i];
100 for (
auto &m : path_ext_m) {
101 if (ev.find(std::get<0>(m)) == 0) {
102 std::get<2>(m) =
true;
109 size_t envp_length = environ_length + extra_ent;
110 std::vector<std::string> envp(envp_length);
111 for (
size_t i = 0; environ[i]; ++i) {
112 std::string ev(environ[i]);
113 for (
auto m : path_ext_m) {
114 if (ev.find(std::get<0>(m)) == 0) {
116 if (ev[ev.length()-1] ==
':') {
117 ev += std::get<1>(m) +
":";
119 ev +=
":" + std::get<1>(m);
126 unsigned int extra_ind = 0;
127 for (
auto m : path_ext_m) {
128 if (! std::get<2>(m)) {
129 std::string ev = std::get<0>(m) + std::get<1>(m) +
":";
130 envp[envp_length - extra_ent + extra_ind++] = ev;
Fawkes library namespace.
std::string command_args_tostring(const char *argv[])
Convert command args to string.
std::string envp_tostring(char *envp[])
Convert environment to string.
std::vector< std::string > envp_copy_expand(char *environ[], const char *path_ext[])
Copy an environment and extend certain paths.