=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd.c,v retrieving revision 1.133 retrieving revision 1.134 diff -c -r1.133 -r1.134 *** src/usr.bin/tmux/cmd.c 2017/01/16 14:49:14 1.133 --- src/usr.bin/tmux/cmd.c 2017/01/16 14:52:25 1.134 *************** *** 1,4 **** ! /* $OpenBSD: cmd.c,v 1.133 2017/01/16 14:49:14 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd.c,v 1.134 2017/01/16 14:52:25 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 308,381 **** return (buf); } - static int - cmd_try_alias(int *argc, char ***argv) - { - struct options_entry *o; - int old_argc = *argc, new_argc; - char **old_argv = *argv, **new_argv; - u_int size, idx; - int i; - size_t wanted; - const char *s, *cp = NULL; - - o = options_get_only(global_options, "command-alias"); - if (o == NULL || options_array_size(o, &size) == -1 || size == 0) - return (-1); - - wanted = strlen(old_argv[0]); - for (idx = 0; idx < size; idx++) { - s = options_array_get(o, idx); - if (s == NULL) - continue; - - cp = strchr(s, '='); - if (cp == NULL || (size_t)(cp - s) != wanted) - continue; - if (strncmp(old_argv[0], s, wanted) == 0) - break; - } - if (idx == size) - return (-1); - - if (cmd_string_split(cp + 1, &new_argc, &new_argv) != 0) - return (-1); - - *argc = new_argc + old_argc - 1; - *argv = xcalloc((*argc) + 1, sizeof **argv); - - for (i = 0; i < new_argc; i++) - (*argv)[i] = xstrdup(new_argv[i]); - for (i = 1; i < old_argc; i++) - (*argv)[new_argc + i - 1] = xstrdup(old_argv[i]); - - log_debug("alias: %s=%s", old_argv[0], cp + 1); - for (i = 0; i < *argc; i++) - log_debug("alias: argv[%d] = %s", i, (*argv)[i]); - - cmd_free_argv(new_argc, new_argv); - return (0); - } - struct cmd * cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) { - const char *name; const struct cmd_entry **entryp, *entry; struct cmd *cmd; struct args *args; char s[BUFSIZ]; ! int ambiguous, allocated = 0; *cause = NULL; if (argc == 0) { xasprintf(cause, "no command"); return (NULL); } - name = argv[0]; - retry: - ambiguous = 0; entry = NULL; for (entryp = cmd_table; *entryp != NULL; entryp++) { if ((*entryp)->alias != NULL && --- 308,328 ---- return (buf); } struct cmd * cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) { const struct cmd_entry **entryp, *entry; struct cmd *cmd; struct args *args; char s[BUFSIZ]; ! int ambiguous = 0; *cause = NULL; if (argc == 0) { xasprintf(cause, "no command"); return (NULL); } entry = NULL; for (entryp = cmd_table; *entryp != NULL; entryp++) { if ((*entryp)->alias != NULL && *************** *** 395,411 **** if (strcmp(entry->name, argv[0]) == 0) break; } - if ((ambiguous || entry == NULL) && - server_proc != NULL && - !allocated && - cmd_try_alias(&argc, &argv) == 0) { - allocated = 1; - goto retry; - } if (ambiguous) goto ambiguous; if (entry == NULL) { ! xasprintf(cause, "unknown command: %s", name); return (NULL); } --- 342,351 ---- if (strcmp(entry->name, argv[0]) == 0) break; } if (ambiguous) goto ambiguous; if (entry == NULL) { ! xasprintf(cause, "unknown command: %s", argv[0]); return (NULL); } *************** *** 425,432 **** cmd->file = xstrdup(file); cmd->line = line; - if (allocated) - cmd_free_argv(argc, argv); return (cmd); ambiguous: --- 365,370 ---- *************** *** 440,446 **** break; } s[strlen(s) - 2] = '\0'; ! xasprintf(cause, "ambiguous command: %s, could be: %s", name, s); return (NULL); usage: --- 378,384 ---- break; } s[strlen(s) - 2] = '\0'; ! xasprintf(cause, "ambiguous command: %s, could be: %s", argv[0], s); return (NULL); usage: