monitor: avoid use of global *cur_mon in monitor_find_completion()
Parameter *mon is added, and local variable *mon added in previous patch is removed. The caller readline_completion(), pass rs->mon as value, which should be initialized in readline_init() called by monitor_init(). Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
599a926abc
commit
d2674b2cf7
@ -8,7 +8,8 @@
|
||||
#define READLINE_MAX_COMPLETIONS 256
|
||||
|
||||
typedef void ReadLineFunc(Monitor *mon, const char *str, void *opaque);
|
||||
typedef void ReadLineCompletionFunc(const char *cmdline);
|
||||
typedef void ReadLineCompletionFunc(Monitor *mon,
|
||||
const char *cmdline);
|
||||
|
||||
typedef struct ReadLineState {
|
||||
char cmd_buf[READLINE_CMD_BUF_SIZE + 1];
|
||||
|
18
monitor.c
18
monitor.c
@ -4141,20 +4141,20 @@ static const char *next_arg_type(const char *typestr)
|
||||
return (p != NULL ? ++p : typestr);
|
||||
}
|
||||
|
||||
static void monitor_find_completion(const char *cmdline)
|
||||
static void monitor_find_completion(Monitor *mon,
|
||||
const char *cmdline)
|
||||
{
|
||||
const char *cmdname;
|
||||
char *args[MAX_ARGS];
|
||||
int nb_args, i, len;
|
||||
const char *ptype, *str;
|
||||
const mon_cmd_t *cmd;
|
||||
Monitor *mon = cur_mon;
|
||||
MonitorBlockComplete mbs;
|
||||
|
||||
parse_cmdline(cmdline, &nb_args, args);
|
||||
#ifdef DEBUG_COMPLETION
|
||||
for(i = 0; i < nb_args; i++) {
|
||||
monitor_printf(cur_mon, "arg%d = '%s'\n", i, (char *)args[i]);
|
||||
for (i = 0; i < nb_args; i++) {
|
||||
monitor_printf(mon, "arg%d = '%s'\n", i, args[i]);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -4173,7 +4173,7 @@ static void monitor_find_completion(const char *cmdline)
|
||||
cmdname = "";
|
||||
else
|
||||
cmdname = args[0];
|
||||
readline_set_completion_index(cur_mon->rs, strlen(cmdname));
|
||||
readline_set_completion_index(mon->rs, strlen(cmdname));
|
||||
for(cmd = mon_cmds; cmd->name != NULL; cmd++) {
|
||||
cmd_completion(mon, cmdname, cmd->name);
|
||||
}
|
||||
@ -4203,7 +4203,7 @@ static void monitor_find_completion(const char *cmdline)
|
||||
switch(*ptype) {
|
||||
case 'F':
|
||||
/* file completion */
|
||||
readline_set_completion_index(cur_mon->rs, strlen(str));
|
||||
readline_set_completion_index(mon->rs, strlen(str));
|
||||
file_completion(mon, str);
|
||||
break;
|
||||
case 'B':
|
||||
@ -4216,7 +4216,7 @@ static void monitor_find_completion(const char *cmdline)
|
||||
case 's':
|
||||
/* XXX: more generic ? */
|
||||
if (!strcmp(cmd->name, "info")) {
|
||||
readline_set_completion_index(cur_mon->rs, strlen(str));
|
||||
readline_set_completion_index(mon->rs, strlen(str));
|
||||
for(cmd = info_cmds; cmd->name != NULL; cmd++) {
|
||||
cmd_completion(mon, str, cmd->name);
|
||||
}
|
||||
@ -4224,12 +4224,12 @@ static void monitor_find_completion(const char *cmdline)
|
||||
char *sep = strrchr(str, '-');
|
||||
if (sep)
|
||||
str = sep + 1;
|
||||
readline_set_completion_index(cur_mon->rs, strlen(str));
|
||||
readline_set_completion_index(mon->rs, strlen(str));
|
||||
for (i = 0; i < Q_KEY_CODE_MAX; i++) {
|
||||
cmd_completion(mon, str, QKeyCode_lookup[i]);
|
||||
}
|
||||
} else if (!strcmp(cmd->name, "help|?")) {
|
||||
readline_set_completion_index(cur_mon->rs, strlen(str));
|
||||
readline_set_completion_index(mon->rs, strlen(str));
|
||||
for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
|
||||
cmd_completion(mon, str, cmd->name);
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ static void readline_completion(ReadLineState *rs)
|
||||
cmdline = g_malloc(rs->cmd_buf_index + 1);
|
||||
memcpy(cmdline, rs->cmd_buf, rs->cmd_buf_index);
|
||||
cmdline[rs->cmd_buf_index] = '\0';
|
||||
rs->completion_finder(cmdline);
|
||||
rs->completion_finder(rs->mon, cmdline);
|
||||
g_free(cmdline);
|
||||
|
||||
/* no completion found */
|
||||
|
Loading…
Reference in New Issue
Block a user