The visitor interface for mapping between QObject/QemuOpts/string and QAPI is scandalously under-documented, making changes to visitor core, individual visitors, and users of visitors difficult to coordinate. Among other questions: when is it safe to pass NULL, vs. when a string must be provided; which visitors implement which callbacks; the difference between concrete and virtual visits. Correct this by retrofitting proper contracts, and document where some of the interface warts remain (for example, we may want to modify visit_end_* to require the same 'obj' as the visit_start counterpart, so the dealloc visitor can be simplified). Later patches in this series will tackle some, but not all, of these warts. Add assertions to (partially) enforce the contract. Some of these were only made possible by recent cleanup commits. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1461879932-9020-13-git-send-email-eblake@redhat.com> [Doc fix from Eric squashed in] Signed-off-by: Markus Armbruster <armbru@redhat.com>
41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
/*
|
|
* Options Visitor
|
|
*
|
|
* Copyright Red Hat, Inc. 2012
|
|
*
|
|
* Author: Laszlo Ersek <lersek@redhat.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
|
|
* See the COPYING.LIB file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef OPTS_VISITOR_H
|
|
#define OPTS_VISITOR_H
|
|
|
|
#include "qapi/visitor.h"
|
|
#include "qemu/option.h"
|
|
|
|
/* Inclusive upper bound on the size of any flattened range. This is a safety
|
|
* (= anti-annoyance) measure; wrong ranges should not cause long startup
|
|
* delays nor exhaust virtual memory.
|
|
*/
|
|
#define OPTS_VISITOR_RANGE_MAX 65536
|
|
|
|
typedef struct OptsVisitor OptsVisitor;
|
|
|
|
/* Contrarily to qemu-option.c::parse_option_number(), OptsVisitor's "int"
|
|
* parser relies on strtoll() instead of strtoull(). Consequences:
|
|
* - string representations of negative numbers yield negative values,
|
|
* - values below INT64_MIN or LLONG_MIN are rejected,
|
|
* - values above INT64_MAX or LLONG_MAX are rejected.
|
|
*
|
|
* The Opts input visitor does not implement support for visiting QAPI
|
|
* alternates, numbers (other than integers), or arbitrary QTypes.
|
|
*/
|
|
OptsVisitor *opts_visitor_new(const QemuOpts *opts);
|
|
void opts_visitor_cleanup(OptsVisitor *nv);
|
|
Visitor *opts_get_visitor(OptsVisitor *nv);
|
|
|
|
#endif
|