mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-16 00:28:10 +02:00
Sync from OpenBSD:
Add flags for 1+2 and 2 arguments to the generic target code, use it for cmd-set-environment/option/window-option and remove the generic options parsing.
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-set-environment.c,v 1.1 2009-08-09 17:48:55 tcunha Exp $ */
|
||||
/* $Id: cmd-set-environment.c,v 1.2 2009-08-11 14:42:59 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -31,27 +31,27 @@ int cmd_set_environment_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_set_environment_entry = {
|
||||
"set-environment", "setenv",
|
||||
"[-gru] " CMD_OPTION_SESSION_USAGE,
|
||||
0, CMD_CHFLAG('g')|CMD_CHFLAG('r')|CMD_CHFLAG('u'),
|
||||
"[-gru] " CMD_TARGET_SESSION_USAGE " name [value]",
|
||||
CMD_ARG12, CMD_CHFLAG('g')|CMD_CHFLAG('r')|CMD_CHFLAG('u'),
|
||||
NULL,
|
||||
cmd_option_parse,
|
||||
cmd_target_parse,
|
||||
cmd_set_environment_exec,
|
||||
cmd_option_free,
|
||||
cmd_option_print
|
||||
cmd_target_free,
|
||||
cmd_target_print
|
||||
};
|
||||
|
||||
int
|
||||
cmd_set_environment_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
{
|
||||
struct cmd_option_data *data = self->data;
|
||||
struct cmd_target_data *data = self->data;
|
||||
struct session *s;
|
||||
struct environ *env;
|
||||
|
||||
if (*data->option == '\0') {
|
||||
if (*data->arg == '\0') {
|
||||
ctx->error(ctx, "empty variable name");
|
||||
return (-1);
|
||||
}
|
||||
if (strchr(data->option, '=') != NULL) {
|
||||
if (strchr(data->arg, '=') != NULL) {
|
||||
ctx->error(ctx, "variable name contains =");
|
||||
return (-1);
|
||||
}
|
||||
@ -65,23 +65,23 @@ cmd_set_environment_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
}
|
||||
|
||||
if (data->chflags & CMD_CHFLAG('u')) {
|
||||
if (data->value != NULL) {
|
||||
if (data->arg2 != NULL) {
|
||||
ctx->error(ctx, "can't specify a value with -u");
|
||||
return (-1);
|
||||
}
|
||||
environ_unset(env, data->option);
|
||||
environ_unset(env, data->arg);
|
||||
} else if (data->chflags & CMD_CHFLAG('r')) {
|
||||
if (data->value != NULL) {
|
||||
if (data->arg2 != NULL) {
|
||||
ctx->error(ctx, "can't specify a value with -r");
|
||||
return (-1);
|
||||
}
|
||||
environ_set(env, data->option, NULL);
|
||||
environ_set(env, data->arg, NULL);
|
||||
} else {
|
||||
if (data->value == NULL) {
|
||||
if (data->arg2 == NULL) {
|
||||
ctx->error(ctx, "no value specified");
|
||||
return (-1);
|
||||
}
|
||||
environ_set(env, data->option, data->value);
|
||||
environ_set(env, data->arg, data->arg2);
|
||||
}
|
||||
|
||||
return (0);
|
||||
|
Reference in New Issue
Block a user