On Wed, 02 Jun 2010 09:31:24 +0200 Markus Armbruster <arm...@redhat.com> wrote:
> Luiz Capitulino <lcapitul...@redhat.com> writes: [...] > > static void check_mandatory_args(const char *cmd_arg_name, > > @@ -4344,6 +4413,9 @@ out: > > * Client argument checking rules: > > * > > * 1. Client must provide all mandatory arguments > > + * 2. Each argument provided by the client must be valid > > + * 3. Each argument provided by the client must have the type expected > > + * by the command > > */ > > static int qmp_check_client_args(const mon_cmd_t *cmd, QDict *client_args) > > { > > @@ -4355,7 +4427,10 @@ static int qmp_check_client_args(const mon_cmd_t > > *cmd, QDict *client_args) > > res.qdict = client_args; > > qdict_iter(cmd_args, check_mandatory_args, &res); > > > > - /* TODO: Check client args type */ > > + if (!res.result && !res.skip) { > > + res.qdict = cmd_args; > > + qdict_iter(client_args, check_client_args_type, &res); > > + } > > What if we have both an O-type argument and other arguments? Then the > 'O' makes check_client_args_type() set res.skip, and we duly skip > checking the other arguments here. I was working on this and it seems a bad idea to allow mixing O-type and other monitor types*. The reason is that you can't easily tell if an argument passed by the client is part of the O-type or the monitor type. We could workaround this by trying to ensure that an argument exists only in one of them, but I really feel this will get messy. I think we should disallow mixing O-type with other argument types and maintain the skip trick, ie. skip any checking in the top level if the argument is an O-type one. * Does this work with the current argument checker?