From patchwork Sun Mar 30 10:58:24 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hani Benhabiles X-Patchwork-Id: 335088 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4A9AB1400C5 for ; Sun, 30 Mar 2014 21:59:45 +1100 (EST) Received: from localhost ([::1]:43700 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUDSo-0008CT-6C for incoming@patchwork.ozlabs.org; Sun, 30 Mar 2014 06:59:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34506) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUDS8-0008BZ-0x for qemu-devel@nongnu.org; Sun, 30 Mar 2014 06:59:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUDS1-0003U6-ST for qemu-devel@nongnu.org; Sun, 30 Mar 2014 06:58:59 -0400 Received: from mail-ee0-x232.google.com ([2a00:1450:4013:c00::232]:54225) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUDS1-0003Ty-Hr for qemu-devel@nongnu.org; Sun, 30 Mar 2014 06:58:53 -0400 Received: by mail-ee0-f50.google.com with SMTP id c13so5732331eek.9 for ; Sun, 30 Mar 2014 03:58:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Bz24oR924aeqPngNT4JOGK55NrJA9E+pWqHp9OIT3Fw=; b=vZC6dcJFYcc7dpIKOUoriTdPShf9GhMPSI88+D6rj1slPZEXsCYaAOIIz7Y7quGkh0 sjvXyrW7dk+jY8DKCZNy0MbTFUTSdDn4fckkkz4hOiNdKHYdd9HUkC+dhT8uGezOdXlH gI/lA420SP0xF083CZMYZhtrrkTSudXk4aFSFvwqzxTx3bXj4xAAWp6yK5Ec4cyVRbF3 2rmLon+YrO1jS/YByOUdFEITr68XWy9GM77q6L/iaJ2+W7++MioYqClOfH7RsKoXDhCg dZqVWtC15QOM5rGSZIH1tGi1Rx9H0Xd1auWZOmJNggSWSDVUWWIkFy3YnfXZ9wPQoJsu 6Mvw== X-Received: by 10.14.104.135 with SMTP id i7mr24001709eeg.34.1396177132632; Sun, 30 Mar 2014 03:58:52 -0700 (PDT) Received: from localhost.localdomain ([41.109.152.17]) by mx.google.com with ESMTPSA id y51sm25023258eeu.0.2014.03.30.03.58.51 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 30 Mar 2014 03:58:52 -0700 (PDT) From: Hani Benhabiles To: qemu-devel@nongnu.org Date: Sun, 30 Mar 2014 11:58:24 +0100 Message-Id: <1396177119-24955-3-git-send-email-kroosec@gmail.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1396177119-24955-1-git-send-email-kroosec@gmail.com> References: <1396177119-24955-1-git-send-email-kroosec@gmail.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4013:c00::232 Cc: kwolf@redhat.com, aliguori@amazon.com, lcapitulino@redhat.com, stefanha@redhat.com, imammedo@redhat.com Subject: [Qemu-devel] [PATCH v2 02/17] monitor: Add command_completion callback to mon_cmd_t. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Convert object_add and object_del commands to use the new callback. Signed-off-by: Hani Benhabiles --- hmp-commands.hx | 2 ++ hmp.h | 3 +++ monitor.c | 19 +++++++++++++------ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 6bf4797..1b382b6 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1254,6 +1254,7 @@ ETEXI .params = "[qom-type=]type,id=str[,prop=value][,...]", .help = "create QOM object", .mhandler.cmd = hmp_object_add, + .command_completion = object_add_completion, }, STEXI @@ -1268,6 +1269,7 @@ ETEXI .params = "id", .help = "destroy QOM object", .mhandler.cmd = hmp_object_del, + .command_completion = object_del_completion, }, STEXI diff --git a/hmp.h b/hmp.h index ed58f0e..2f2c059 100644 --- a/hmp.h +++ b/hmp.h @@ -15,6 +15,7 @@ #define HMP_H #include "qemu-common.h" +#include "qemu/readline.h" #include "qapi-types.h" #include "qapi/qmp/qdict.h" @@ -92,5 +93,7 @@ void hmp_qemu_io(Monitor *mon, const QDict *qdict); void hmp_cpu_add(Monitor *mon, const QDict *qdict); void hmp_object_add(Monitor *mon, const QDict *qdict); void hmp_object_del(Monitor *mon, const QDict *qdict); +void object_add_completion(ReadLineState *rs, int nb_args, const char *str); +void object_del_completion(ReadLineState *rs, int nb_args, const char *str); #endif diff --git a/monitor.c b/monitor.c index 342e83b..566a83f 100644 --- a/monitor.c +++ b/monitor.c @@ -137,6 +137,7 @@ typedef struct mon_cmd_t { * used, and mhandler of 1st level plays the role of help function. */ struct mon_cmd_t *sub_table; + void (*command_completion)(ReadLineState *rs, int nb_args, const char *str); } mon_cmd_t; /* file descriptors passed via SCM_RIGHTS */ @@ -4298,11 +4299,15 @@ static void device_add_completion(ReadLineState *rs, const char *str) g_slist_free(list); } -static void object_add_completion(ReadLineState *rs, const char *str) +void object_add_completion(ReadLineState *rs, int nb_args, const char *str) { GSList *list, *elt; size_t len; + if (nb_args != 2) { + return; + } + len = strlen(str); readline_set_completion_index(rs, len); list = elt = object_class_get_list(TYPE_USER_CREATABLE, false); @@ -4337,11 +4342,14 @@ static void device_del_completion(ReadLineState *rs, BusState *bus, } } -static void object_del_completion(ReadLineState *rs, const char *str) +void object_del_completion(ReadLineState *rs, int nb_args, const char *str) { ObjectPropertyInfoList *list, *start; size_t len; + if (nb_args != 2) { + return; + } len = strlen(str); readline_set_completion_index(rs, len); @@ -4395,6 +4403,9 @@ static void monitor_find_completion_by_table(Monitor *mon, return monitor_find_completion_by_table(mon, cmd->sub_table, &args[1], nb_args - 1); } + if (cmd->command_completion) { + return cmd->command_completion(mon->rs, nb_args, args[nb_args - 1]); + } ptype = next_arg_type(cmd->args_type); for(i = 0; i < nb_args - 2; i++) { @@ -4424,8 +4435,6 @@ static void monitor_find_completion_by_table(Monitor *mon, case 'O': if (!strcmp(cmd->name, "device_add") && nb_args == 2) { device_add_completion(mon->rs, str); - } else if (!strcmp(cmd->name, "object_add") && nb_args == 2) { - object_add_completion(mon->rs, str); } break; case 's': @@ -4445,8 +4454,6 @@ static void monitor_find_completion_by_table(Monitor *mon, size_t len = strlen(str); readline_set_completion_index(mon->rs, len); device_del_completion(mon->rs, sysbus_get_default(), str, len); - } else if (!strcmp(cmd->name, "object_del") && nb_args == 2) { - object_del_completion(mon->rs, str); } break; default: