mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 02:24:51 +00:00
monitor: Reduce target-specific methods
The following methods don't use target-specific code anymore: - hmp_compare_cmd() - monitor_register_hmp() - monitor_register_hmp_info_hrt() Move them to hmp.c which is target-agnostic, being built once. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org> Message-Id: <20260129164039.58472-5-philmd@linaro.org>
This commit is contained in:
@@ -33,8 +33,6 @@
|
||||
#include "qapi/qapi-commands-control.h"
|
||||
#include "qapi/qapi-commands-misc.h"
|
||||
#include "qapi/qapi-commands-machine.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/cutils.h"
|
||||
|
||||
#if defined(TARGET_S390X)
|
||||
#include "hw/s390x/storage-keys.h"
|
||||
@@ -44,29 +42,6 @@
|
||||
/* Make devices configuration available for use in hmp-commands*.hx templates */
|
||||
#include CONFIG_DEVICES
|
||||
|
||||
/**
|
||||
* Is @name in the '|' separated list of names @list?
|
||||
*/
|
||||
int hmp_compare_cmd(const char *name, const char *list)
|
||||
{
|
||||
const char *p, *pstart;
|
||||
int len;
|
||||
len = strlen(name);
|
||||
p = list;
|
||||
for (;;) {
|
||||
pstart = p;
|
||||
p = qemu_strchrnul(p, '|');
|
||||
if ((p - pstart) == len && !memcmp(pstart, name, len)) {
|
||||
return 1;
|
||||
}
|
||||
if (*p == '\0') {
|
||||
break;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Please update hmp-commands.hx when adding or changing commands */
|
||||
static HMPCommand hmp_info_cmds[] = {
|
||||
#include "hmp-commands-info.h"
|
||||
@@ -147,35 +122,3 @@ static void __attribute__((__constructor__)) sortcmdlist(void)
|
||||
sizeof(*hmp_info_cmds),
|
||||
compare_mon_cmd);
|
||||
}
|
||||
|
||||
void monitor_register_hmp(const char *name, bool info,
|
||||
void (*cmd)(Monitor *mon, const QDict *qdict))
|
||||
{
|
||||
HMPCommand *table = hmp_cmds_for_target(info);
|
||||
|
||||
while (table->name != NULL) {
|
||||
if (strcmp(table->name, name) == 0) {
|
||||
g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
|
||||
table->cmd = cmd;
|
||||
return;
|
||||
}
|
||||
table++;
|
||||
}
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
void monitor_register_hmp_info_hrt(const char *name,
|
||||
HumanReadableText *(*handler)(Error **errp))
|
||||
{
|
||||
HMPCommand *table = hmp_cmds_for_target(true);
|
||||
|
||||
while (table->name != NULL) {
|
||||
if (strcmp(table->name, name) == 0) {
|
||||
g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
|
||||
table->cmd_info_hrt = handler;
|
||||
return;
|
||||
}
|
||||
table++;
|
||||
}
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
@@ -1497,3 +1497,58 @@ void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp)
|
||||
monitor_event, NULL, &mon->common, NULL, true);
|
||||
monitor_list_append(&mon->common);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is @name in the '|' separated list of names @list?
|
||||
*/
|
||||
int hmp_compare_cmd(const char *name, const char *list)
|
||||
{
|
||||
const char *p, *pstart;
|
||||
int len;
|
||||
len = strlen(name);
|
||||
p = list;
|
||||
for (;;) {
|
||||
pstart = p;
|
||||
p = qemu_strchrnul(p, '|');
|
||||
if ((p - pstart) == len && !memcmp(pstart, name, len)) {
|
||||
return 1;
|
||||
}
|
||||
if (*p == '\0') {
|
||||
break;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void monitor_register_hmp(const char *name, bool info,
|
||||
void (*cmd)(Monitor *mon, const QDict *qdict))
|
||||
{
|
||||
HMPCommand *table = hmp_cmds_for_target(info);
|
||||
|
||||
while (table->name != NULL) {
|
||||
if (strcmp(table->name, name) == 0) {
|
||||
g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
|
||||
table->cmd = cmd;
|
||||
return;
|
||||
}
|
||||
table++;
|
||||
}
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
void monitor_register_hmp_info_hrt(const char *name,
|
||||
HumanReadableText *(*handler)(Error **errp))
|
||||
{
|
||||
HMPCommand *table = hmp_cmds_for_target(true);
|
||||
|
||||
while (table->name != NULL) {
|
||||
if (strcmp(table->name, name) == 0) {
|
||||
g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
|
||||
table->cmd_info_hrt = handler;
|
||||
return;
|
||||
}
|
||||
table++;
|
||||
}
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user