50 template <
unsigned dataSize,
unsigned maxArgs>
54 char* args[maxArgs + 2];
64 if (cmd.size() >= dataSize - 1)
65 throw std::out_of_range(
"command <" + cmd +
"> too large");
67 cmd.copy(args[0], cmd.size());
68 args[0][cmd.size()] =
'\0';
69 args[1] = args[0] + cmd.size() + 1;
74 if (static_cast<unsigned>(args[argc + 1] + arg.size() - data) >= dataSize)
75 throw std::out_of_range(
"argument list too long");
77 throw std::out_of_range(
"too many arguments");
80 arg.copy(args[argc], arg.size());
81 args[argc][arg.size()] =
'\0';
82 args[argc + 1] = args[argc] + arg.size() + 1;
94 ::execvp(args[0], args);