int cmd_set_environment_exec(struct cmd *self, struct cmd_ctx *ctx) { struct args *args = self->args; struct session *s; struct environ *env; const char *name, *value; name = args->argv[0]; if (*name == '\0') { ctx->error(ctx, "empty variable name"); return (-1); } if (strchr(name, '=') != NULL) { ctx->error(ctx, "variable name contains ="); return (-1); } if (args->argc < 1) value = NULL; else value = args->argv[1]; if (args_has(self->args, 'g')) env = &global_environ; else { if ((s = cmd_find_session(ctx, args_get(args, 't'), 0)) == NULL) return (-1); env = &s->environ; } if (args_has(self->args, 'u')) { if (value != NULL) { ctx->error(ctx, "can't specify a value with -u"); return (-1); } environ_unset(env, name); } else if (args_has(self->args, 'r')) { if (value != NULL) { ctx->error(ctx, "can't specify a value with -r"); return (-1); } environ_set(env, name, NULL); } else { if (value == NULL) { ctx->error(ctx, "no value specified"); return (-1); } environ_set(env, name, value); } return (0); }
enum cmd_retval cmd_set_environment_exec(struct cmd *self, struct cmd_q *cmdq) { struct args *args = self->args; struct environ *env; const char *name, *value; name = args->argv[0]; if (*name == '\0') { cmdq_error(cmdq, "empty variable name"); return (CMD_RETURN_ERROR); } if (strchr(name, '=') != NULL) { cmdq_error(cmdq, "variable name contains ="); return (CMD_RETURN_ERROR); } if (args->argc < 2) value = NULL; else value = args->argv[1]; if (args_has(self->args, 'g') || cmdq->state.tflag.s == NULL) env = global_environ; else env = cmdq->state.tflag.s->environ; if (args_has(self->args, 'u')) { if (value != NULL) { cmdq_error(cmdq, "can't specify a value with -u"); return (CMD_RETURN_ERROR); } environ_unset(env, name); } else if (args_has(self->args, 'r')) { if (value != NULL) { cmdq_error(cmdq, "can't specify a value with -r"); return (CMD_RETURN_ERROR); } environ_clear(env, name); } else { if (value == NULL) { cmdq_error(cmdq, "no value specified"); return (CMD_RETURN_ERROR); } environ_set(env, name, "%s", value); } return (CMD_RETURN_NORMAL); }