Am 13.07.2017 um 17:01 schrieb Daniel P. Berrange:
On Thu, Jul 13, 2017 at 05:00:39PM +0200, Peter Lieven wrote:
Am 13.07.2017 um 16:58 schrieb Daniel P. Berrange:
On Thu, Jul 13, 2017 at 04:18:13PM +0200, Peter Lieven wrote:
Okay, so it has to be a mix of QAPI parsing and manual parameter checking,
right?
Yeah. It does feel like a valid RFE for QAPI to add a permitted range to
'int' types though, which would simplify the code in future.
I currently have the following:
options = qemu_opts_to_qdict(opts, NULL);
qdict_extract_subqdict(options, &compressopts, "compress.");
v = qobject_input_visitor_new_keyval(QOBJECT(compressopts));
visit_start_struct(v, NULL, NULL, 0, &local_err);
if (local_err) {
ret= -EINVAL;
goto finish;
}
visit_type_Qcow2Compress_members(v, &compress, &local_err);
if (local_err) {
ret= -EINVAL;
goto finish;
}
visit_end_struct(v, NULL);
visit_free(v);
QDECREF(compressopts);
QDECREF(options)
Looks good.
And I have the following 2 questions:
a) I have to specifiy compress.format and compress.level otherwise I will
get an error. How can I fix that the settings are optional?
Put an '*' as the first character of any field name if it should be optional.
b) If I just specify a compress.format can I default the compress.level to 0
without an error?
I believe you'd get compress.level as 0 automatically for an 'int' type.
I still face the issue that I now always have to specify a compress.format.
I tried to solve it like this:
[snip]
that's not needed if you name the parameter '*level' in the QAPI schema
its not needed for the *level, but I still get the error that the format
parameter is missing otherwise.
And I can't make format optional.
Peter