41 std::string command =
"";
42 for (
int i = 0; argv[i]; ++i) {
59 std::string environment =
"";
60 for (
int i = 0; envp[i]; ++i) {
63 environment += envp[i];
82 std::vector<std::string>
85 std::list<std::tuple<std::string, std::string, bool>> path_ext_m;
86 for (
size_t i = 0; path_ext[i] && path_ext[i + 1]; i += 2) {
87 std::string match = std::string(path_ext[i]) +
"=";
88 path_ext_m.push_back(std::make_tuple(match, std::string(path_ext[i + 1]),
false));
91 unsigned int extra_ent = 0;
93 size_t environ_length = 0;
94 for (
size_t i = 0; environ[i]; ++i) {
96 std::string ev = environ[i];
97 for (
auto &m : path_ext_m) {
98 if (ev.find(std::get<0>(m)) == 0) {
99 std::get<2>(m) =
true;
106 size_t envp_length = environ_length + extra_ent;
107 std::vector<std::string> envp(envp_length);
108 for (
size_t i = 0; environ[i]; ++i) {
109 std::string ev(environ[i]);
110 for (
auto m : path_ext_m) {
111 if (ev.find(std::get<0>(m)) == 0) {
113 if (ev[ev.length() - 1] ==
':') {
114 ev += std::get<1>(m) +
":";
116 ev +=
":" + std::get<1>(m);
123 unsigned int extra_ind = 0;
124 for (
auto m : path_ext_m) {
125 if (!std::get<2>(m)) {
126 std::string ev = std::get<0>(m) + std::get<1>(m) +
":";
127 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.