readline: Extract readline_add_completion_of() from monitor
monitor/misc.h has static add_completion_option(). It's useful
elsewhere in the monitor. Since it's not monitor-specific, move it to
util/readline.c renamed to readline_add_completion_of(), and put it to
use.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20230124121946.1139465-7-armbru@redhat.com>
diff --git a/monitor/hmp.c b/monitor/hmp.c
index e5d914b..1b04f01 100644
--- a/monitor/hmp.c
+++ b/monitor/hmp.c
@@ -1189,8 +1189,8 @@
}
memcpy(cmd, pstart, len);
cmd[len] = '\0';
- if (name[0] == '\0' || !strncmp(name, cmd, strlen(name))) {
- readline_add_completion(mon->rs, cmd);
+ if (name[0] == '\0') {
+ readline_add_completion_of(mon->rs, name, cmd);
}
if (*p == '\0') {
break;
@@ -1270,7 +1270,7 @@
{
const char *cmdname;
int i;
- const char *ptype, *old_ptype, *str, *name;
+ const char *ptype, *old_ptype, *str;
const HMPCommand *cmd;
BlockBackend *blk = NULL;
@@ -1335,10 +1335,8 @@
/* block device name completion */
readline_set_completion_index(mon->rs, strlen(str));
while ((blk = blk_next(blk)) != NULL) {
- name = blk_name(blk);
- if (str[0] == '\0' ||
- !strncmp(name, str, strlen(str))) {
- readline_add_completion(mon->rs, name);
+ if (str[0] == '\0') {
+ readline_add_completion_of(mon->rs, str, blk_name(blk));
}
}
break;