version 1.9, 2010/07/24 20:11:59 |
version 1.10, 2011/01/04 00:42:46 |
|
|
|
|
const struct cmd_entry cmd_if_shell_entry = { |
const struct cmd_entry cmd_if_shell_entry = { |
"if-shell", "if", |
"if-shell", "if", |
|
"", 2, 2, |
"shell-command command", |
"shell-command command", |
CMD_ARG2, "", |
0, |
cmd_target_init, |
NULL, |
cmd_target_parse, |
NULL, |
cmd_if_shell_exec, |
cmd_if_shell_exec |
cmd_target_free, |
|
cmd_target_print |
|
}; |
}; |
|
|
struct cmd_if_shell_data { |
struct cmd_if_shell_data { |
|
|
int |
int |
cmd_if_shell_exec(struct cmd *self, struct cmd_ctx *ctx) |
cmd_if_shell_exec(struct cmd *self, struct cmd_ctx *ctx) |
{ |
{ |
struct cmd_target_data *data = self->data; |
struct args *args = self->args; |
struct cmd_if_shell_data *cdata; |
struct cmd_if_shell_data *cdata; |
struct job *job; |
struct job *job; |
|
|
cdata = xmalloc(sizeof *cdata); |
cdata = xmalloc(sizeof *cdata); |
cdata->cmd = xstrdup(data->arg2); |
cdata->cmd = xstrdup(args->argv[1]); |
memcpy(&cdata->ctx, ctx, sizeof cdata->ctx); |
memcpy(&cdata->ctx, ctx, sizeof cdata->ctx); |
|
|
if (ctx->cmdclient != NULL) |
if (ctx->cmdclient != NULL) |
|
|
ctx->curclient->references++; |
ctx->curclient->references++; |
|
|
job = job_add(NULL, 0, NULL, |
job = job_add(NULL, 0, NULL, |
data->arg, cmd_if_shell_callback, cmd_if_shell_free, cdata); |
args->argv[0], cmd_if_shell_callback, cmd_if_shell_free, cdata); |
job_run(job); |
job_run(job); |
|
|
return (1); /* don't let client exit */ |
return (1); /* don't let client exit */ |