From patchwork Tue Jun 22 17:40:48 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 56552 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 2E481B6F0C for ; Wed, 23 Jun 2010 03:53:03 +1000 (EST) Received: from localhost ([127.0.0.1]:41187 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OR7ee-0002Zn-Nd for incoming@patchwork.ozlabs.org; Tue, 22 Jun 2010 13:53:00 -0400 Received: from [140.186.70.92] (port=55623 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OR7TY-0004Zf-MT for qemu-devel@nongnu.org; Tue, 22 Jun 2010 13:41:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OR7TR-0000eE-8E for qemu-devel@nongnu.org; Tue, 22 Jun 2010 13:41:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:1134) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OR7TQ-0000e8-TH for qemu-devel@nongnu.org; Tue, 22 Jun 2010 13:41:25 -0400 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o5MHfNGL031070 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 22 Jun 2010 13:41:24 -0400 Received: from localhost (vpn-10-15.rdu.redhat.com [10.11.10.15]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o5MHfMcb031379; Tue, 22 Jun 2010 13:41:23 -0400 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Tue, 22 Jun 2010 14:40:48 -0300 Message-Id: <1277228451-7741-11-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1277228451-7741-1-git-send-email-lcapitulino@redhat.com> References: <1277228451-7741-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.17 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. Cc: armbru@redhat.com Subject: [Qemu-devel] [PATCH 10/13] QMP: Drop old client argument checker X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Previous two commits added qmp_check_client_args(), which fully replaces this code and is way better. It's important to note that the new checker doesn't support the '/' arg type. As we don't have any of those handlers converted to QMP, this is just dead code. Signed-off-by: Luiz Capitulino --- monitor.c | 176 ------------------------------------------------------------- 1 files changed, 0 insertions(+), 176 deletions(-) diff --git a/monitor.c b/monitor.c index 8d074c2..2a29095 100644 --- a/monitor.c +++ b/monitor.c @@ -3961,177 +3961,6 @@ static int monitor_can_read(void *opaque) return (mon->suspend_cnt == 0) ? 1 : 0; } -typedef struct CmdArgs { - QString *name; - int type; - int flag; - int optional; -} CmdArgs; - -static int check_opt(const CmdArgs *cmd_args, const char *name, QDict *args) -{ - if (!cmd_args->optional) { - qerror_report(QERR_MISSING_PARAMETER, name); - return -1; - } - - return 0; -} - -static int check_arg(const CmdArgs *cmd_args, QDict *args) -{ - QObject *value; - const char *name; - - name = qstring_get_str(cmd_args->name); - - if (!args) { - return check_opt(cmd_args, name, args); - } - - value = qdict_get(args, name); - if (!value) { - return check_opt(cmd_args, name, args); - } - - switch (cmd_args->type) { - case 'F': - case 'B': - case 's': - if (qobject_type(value) != QTYPE_QSTRING) { - qerror_report(QERR_INVALID_PARAMETER_TYPE, name, "string"); - return -1; - } - break; - case '/': { - int i; - const char *keys[] = { "count", "format", "size", NULL }; - - for (i = 0; keys[i]; i++) { - QObject *obj = qdict_get(args, keys[i]); - if (!obj) { - qerror_report(QERR_MISSING_PARAMETER, name); - return -1; - } - if (qobject_type(obj) != QTYPE_QINT) { - qerror_report(QERR_INVALID_PARAMETER_TYPE, name, "int"); - return -1; - } - } - break; - } - case 'i': - case 'l': - case 'M': - if (qobject_type(value) != QTYPE_QINT) { - qerror_report(QERR_INVALID_PARAMETER_TYPE, name, "int"); - return -1; - } - break; - case 'f': - case 'T': - if (qobject_type(value) != QTYPE_QINT && qobject_type(value) != QTYPE_QFLOAT) { - qerror_report(QERR_INVALID_PARAMETER_TYPE, name, "number"); - return -1; - } - break; - case 'b': - if (qobject_type(value) != QTYPE_QBOOL) { - qerror_report(QERR_INVALID_PARAMETER_TYPE, name, "bool"); - return -1; - } - break; - case '-': - if (qobject_type(value) != QTYPE_QINT && - qobject_type(value) != QTYPE_QBOOL) { - qerror_report(QERR_INVALID_PARAMETER_TYPE, name, "bool"); - return -1; - } - break; - case 'O': - default: - /* impossible */ - abort(); - } - - return 0; -} - -static void cmd_args_init(CmdArgs *cmd_args) -{ - cmd_args->name = qstring_new(); - cmd_args->type = cmd_args->flag = cmd_args->optional = 0; -} - -static int check_opts(QemuOptsList *opts_list, QDict *args) -{ - assert(!opts_list->desc->name); - return 0; -} - -/* - * This is not trivial, we have to parse Monitor command's argument - * type syntax to be able to check the arguments provided by clients. - * - * In the near future we will be using an array for that and will be - * able to drop all this parsing... - */ -static int monitor_check_qmp_args(const mon_cmd_t *cmd, QDict *args) -{ - int err; - const char *p; - CmdArgs cmd_args; - QemuOptsList *opts_list; - - if (cmd->args_type == NULL) { - return (qdict_size(args) == 0 ? 0 : -1); - } - - err = 0; - cmd_args_init(&cmd_args); - opts_list = NULL; - - for (p = cmd->args_type;; p++) { - if (*p == ':') { - cmd_args.type = *++p; - p++; - if (cmd_args.type == '-') { - cmd_args.flag = *p++; - cmd_args.optional = 1; - } else if (cmd_args.type == 'O') { - opts_list = qemu_find_opts(qstring_get_str(cmd_args.name)); - assert(opts_list); - } else if (*p == '?') { - cmd_args.optional = 1; - p++; - } - - assert(*p == ',' || *p == '\0'); - if (opts_list) { - err = check_opts(opts_list, args); - opts_list = NULL; - } else { - err = check_arg(&cmd_args, args); - QDECREF(cmd_args.name); - cmd_args_init(&cmd_args); - } - - if (err < 0) { - break; - } - } else { - qstring_append_chr(cmd_args.name, *p); - } - - if (*p == '\0') { - break; - } - } - - QDECREF(cmd_args.name); - return err; -} - static int invalid_qmp_mode(const Monitor *mon, const char *cmd_name) { int is_cap = compare_cmd(cmd_name, "qmp_capabilities"); @@ -4414,11 +4243,6 @@ static void handle_qmp_command(JSONMessageParser *parser, QList *tokens) goto err_out; } - err = monitor_check_qmp_args(cmd, args); - if (err < 0) { - goto err_out; - } - if (monitor_handler_is_async(cmd)) { qmp_async_cmd_handler(mon, cmd, args); } else {