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>
master
Wenchao Xia 2013-08-27 20:38:16 +08:00 committed by Luiz Capitulino
parent 599a926abc
commit d2674b2cf7
3 changed files with 12 additions and 11 deletions

View File

@ -8,7 +8,8 @@
#define READLINE_MAX_COMPLETIONS 256 #define READLINE_MAX_COMPLETIONS 256
typedef void ReadLineFunc(Monitor *mon, const char *str, void *opaque); 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 { typedef struct ReadLineState {
char cmd_buf[READLINE_CMD_BUF_SIZE + 1]; char cmd_buf[READLINE_CMD_BUF_SIZE + 1];

View File

@ -4141,20 +4141,20 @@ static const char *next_arg_type(const char *typestr)
return (p != NULL ? ++p : 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; const char *cmdname;
char *args[MAX_ARGS]; char *args[MAX_ARGS];
int nb_args, i, len; int nb_args, i, len;
const char *ptype, *str; const char *ptype, *str;
const mon_cmd_t *cmd; const mon_cmd_t *cmd;
Monitor *mon = cur_mon;
MonitorBlockComplete mbs; MonitorBlockComplete mbs;
parse_cmdline(cmdline, &nb_args, args); parse_cmdline(cmdline, &nb_args, args);
#ifdef DEBUG_COMPLETION #ifdef DEBUG_COMPLETION
for (i = 0; i < nb_args; i++) { for (i = 0; i < nb_args; i++) {
monitor_printf(cur_mon, "arg%d = '%s'\n", i, (char *)args[i]); monitor_printf(mon, "arg%d = '%s'\n", i, args[i]);
} }
#endif #endif
@ -4173,7 +4173,7 @@ static void monitor_find_completion(const char *cmdline)
cmdname = ""; cmdname = "";
else else
cmdname = args[0]; 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++) { for(cmd = mon_cmds; cmd->name != NULL; cmd++) {
cmd_completion(mon, cmdname, cmd->name); cmd_completion(mon, cmdname, cmd->name);
} }
@ -4203,7 +4203,7 @@ static void monitor_find_completion(const char *cmdline)
switch(*ptype) { switch(*ptype) {
case 'F': case 'F':
/* file completion */ /* file completion */
readline_set_completion_index(cur_mon->rs, strlen(str)); readline_set_completion_index(mon->rs, strlen(str));
file_completion(mon, str); file_completion(mon, str);
break; break;
case 'B': case 'B':
@ -4216,7 +4216,7 @@ static void monitor_find_completion(const char *cmdline)
case 's': case 's':
/* XXX: more generic ? */ /* XXX: more generic ? */
if (!strcmp(cmd->name, "info")) { 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++) { for(cmd = info_cmds; cmd->name != NULL; cmd++) {
cmd_completion(mon, str, cmd->name); cmd_completion(mon, str, cmd->name);
} }
@ -4224,12 +4224,12 @@ static void monitor_find_completion(const char *cmdline)
char *sep = strrchr(str, '-'); char *sep = strrchr(str, '-');
if (sep) if (sep)
str = sep + 1; 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++) { for (i = 0; i < Q_KEY_CODE_MAX; i++) {
cmd_completion(mon, str, QKeyCode_lookup[i]); cmd_completion(mon, str, QKeyCode_lookup[i]);
} }
} else if (!strcmp(cmd->name, "help|?")) { } 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++) { for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
cmd_completion(mon, str, cmd->name); cmd_completion(mon, str, cmd->name);
} }

View File

@ -285,7 +285,7 @@ static void readline_completion(ReadLineState *rs)
cmdline = g_malloc(rs->cmd_buf_index + 1); cmdline = g_malloc(rs->cmd_buf_index + 1);
memcpy(cmdline, rs->cmd_buf, rs->cmd_buf_index); memcpy(cmdline, rs->cmd_buf, rs->cmd_buf_index);
cmdline[rs->cmd_buf_index] = '\0'; cmdline[rs->cmd_buf_index] = '\0';
rs->completion_finder(cmdline); rs->completion_finder(rs->mon, cmdline);
g_free(cmdline); g_free(cmdline);
/* no completion found */ /* no completion found */