#endif
#include "command.h"
+#include "util.h"
void
Command_appendParameter(struct Command *cmd, char const *param)
{
- char const ** p = Vector_pushback(&cmd->params);
- *p = param;
+ switch (cmd->params_style_) {
+ case parNONE :
+ Vector_init(&cmd->params.v, 10);
+ cmd->params_style_ = parVEC;
+ /*@fallthrough@*/
+ case parVEC : {
+ char const **p = Vector_pushback(&cmd->params.v);
+ *p = param;
+ break;
+ }
+
+ default :
+ WRITE_MSG(2, "internal error: conflicting functions Command_appendParameter() and Command_setParams() used together; aborting...\n");
+ abort();
+ }
}
#endif
#include "command.h"
+#include "util.h"
#include <unistd.h>
#include <fcntl.h>
{
int p[2];
- Vector_zeroEnd(&cmd->params);
+ if (cmd->params_style_==parVEC)
+ Vector_zeroEnd(&cmd->params.v);
if (!do_fork)
cmd->pid = 0;
}
if (cmd->pid==0) {
+ char const ** argv = { 0 };
+
if (do_fork) close(p[0]);
- execv(cmd->filename ? cmd->filename : ((char **)(Vector_begin(&cmd->params)))[0],
- cmd->params.data);
+ switch (cmd->params_style_) {
+ case parVEC : argv = cmd->params.v.data; break;
+ case parDATA : argv = cmd->params.d; break;
+ default : break;
+ }
+
+ execv(cmd->filename ? cmd->filename : argv[0],
+ reinterpret_cast(char **const)(argv));
cmd->err = errno;
assert(cmd->err != 0);
void
Command_free(struct Command *cmd)
{
- Vector_free(&cmd->params);
+ if (cmd->params_style_==parVEC)
+ Vector_free(&cmd->params.v);
}
#include "command.h"
void
-Command_init(struct Command *cmd, size_t UNUSED param_count)
+Command_init(struct Command *cmd)
{
- Vector_init(&cmd->params, sizeof(char *));
- cmd->filename = 0;
- cmd->pid = -1;
- cmd->rc = -1;
- cmd->err = 0;
+ cmd->filename = 0;
+ cmd->pid = -1;
+ cmd->rc = -1;
+ cmd->err = 0;
+ cmd->params_style_ = parNONE;
}