Commit 0b2a0d6b authored by Eric Blake's avatar Eric Blake Committed by Markus Armbruster
Browse files

qapi: Swap 'name' in visit_* callbacks to match public API



As explained in the previous patches, matching argument order of
'name, &value' to JSON's "name":value makes sense.  However,
while the last two patches were easy with Coccinelle, I ended up
doing this one all by hand.  Now all the visitor callbacks match
the main interface.

The compiler is able to enforce that all clients match the changed
interface in visitor-impl.h, even where two pointers are being
swapped, because only one of the two pointers is const (if that
were not the case, then C's looseness on treating 'char *' like
'void *' would have made review a bit harder).

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <1454075341-13658-21-git-send-email-eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent d7bce999
Loading
Loading
Loading
Loading
+21 −18
Original line number Diff line number Diff line
@@ -18,8 +18,8 @@
struct Visitor
{
    /* Must be set */
    void (*start_struct)(Visitor *v, void **obj, const char *kind,
                         const char *name, size_t size, Error **errp);
    void (*start_struct)(Visitor *v, const char *name, void **obj,
                         const char *kind, size_t size, Error **errp);
    void (*end_struct)(Visitor *v, Error **errp);

    void (*start_implicit_struct)(Visitor *v, void **obj, size_t size,
@@ -30,38 +30,41 @@ struct Visitor
    GenericList *(*next_list)(Visitor *v, GenericList **list, Error **errp);
    void (*end_list)(Visitor *v, Error **errp);

    void (*type_enum)(Visitor *v, int *obj, const char * const strings[],
                      const char *kind, const char *name, Error **errp);
    void (*type_enum)(Visitor *v, const char *name, int *obj,
                      const char *const strings[], const char *kind,
                      Error **errp);
    /* May be NULL; only needed for input visitors. */
    void (*get_next_type)(Visitor *v, QType *type, bool promote_int,
                          const char *name, Error **errp);
    void (*get_next_type)(Visitor *v, const char *name, QType *type,
                          bool promote_int, Error **errp);

    /* Must be set. */
    void (*type_int64)(Visitor *v, int64_t *obj, const char *name,
    void (*type_int64)(Visitor *v, const char *name, int64_t *obj,
                       Error **errp);
    /* Must be set. */
    void (*type_uint64)(Visitor *v, uint64_t *obj, const char *name,
    void (*type_uint64)(Visitor *v, const char *name, uint64_t *obj,
                        Error **errp);
    /* Optional; fallback is type_uint64().  */
    void (*type_size)(Visitor *v, uint64_t *obj, const char *name,
    void (*type_size)(Visitor *v, const char *name, uint64_t *obj,
                      Error **errp);
    /* Must be set. */
    void (*type_bool)(Visitor *v, bool *obj, const char *name, Error **errp);
    void (*type_str)(Visitor *v, char **obj, const char *name, Error **errp);
    void (*type_number)(Visitor *v, double *obj, const char *name,
    void (*type_bool)(Visitor *v, const char *name, bool *obj, Error **errp);
    void (*type_str)(Visitor *v, const char *name, char **obj, Error **errp);
    void (*type_number)(Visitor *v, const char *name, double *obj,
                        Error **errp);
    void (*type_any)(Visitor *v, QObject **obj, const char *name,
    void (*type_any)(Visitor *v, const char *name, QObject **obj,
                     Error **errp);

    /* May be NULL; most useful for input visitors. */
    void (*optional)(Visitor *v, bool *present, const char *name);
    void (*optional)(Visitor *v, const char *name, bool *present);

    bool (*start_union)(Visitor *v, bool data_present, Error **errp);
};

void input_type_enum(Visitor *v, int *obj, const char * const strings[],
                     const char *kind, const char *name, Error **errp);
void output_type_enum(Visitor *v, int *obj, const char * const strings[],
                      const char *kind, const char *name, Error **errp);
void input_type_enum(Visitor *v, const char *name, int *obj,
                     const char *const strings[], const char *kind,
                     Error **errp);
void output_type_enum(Visitor *v, const char *name, int *obj,
                      const char *const strings[], const char *kind,
                      Error **errp);

#endif
+8 −8
Original line number Diff line number Diff line
@@ -125,8 +125,8 @@ opts_visitor_insert(GHashTable *unprocessed_opts, const QemuOpt *opt)


static void
opts_start_struct(Visitor *v, void **obj, const char *kind,
                  const char *name, size_t size, Error **errp)
opts_start_struct(Visitor *v, const char *name, void **obj, const char *kind,
                  size_t size, Error **errp)
{
    OptsVisitor *ov = to_ov(v);
    const QemuOpt *opt;
@@ -312,7 +312,7 @@ processed(OptsVisitor *ov, const char *name)


static void
opts_type_str(Visitor *v, char **obj, const char *name, Error **errp)
opts_type_str(Visitor *v, const char *name, char **obj, Error **errp)
{
    OptsVisitor *ov = to_ov(v);
    const QemuOpt *opt;
@@ -328,7 +328,7 @@ opts_type_str(Visitor *v, char **obj, const char *name, Error **errp)

/* mimics qemu-option.c::parse_option_bool() */
static void
opts_type_bool(Visitor *v, bool *obj, const char *name, Error **errp)
opts_type_bool(Visitor *v, const char *name, bool *obj, Error **errp)
{
    OptsVisitor *ov = to_ov(v);
    const QemuOpt *opt;
@@ -361,7 +361,7 @@ opts_type_bool(Visitor *v, bool *obj, const char *name, Error **errp)


static void
opts_type_int64(Visitor *v, int64_t *obj, const char *name, Error **errp)
opts_type_int64(Visitor *v, const char *name, int64_t *obj, Error **errp)
{
    OptsVisitor *ov = to_ov(v);
    const QemuOpt *opt;
@@ -417,7 +417,7 @@ opts_type_int64(Visitor *v, int64_t *obj, const char *name, Error **errp)


static void
opts_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)
opts_type_uint64(Visitor *v, const char *name, uint64_t *obj, Error **errp)
{
    OptsVisitor *ov = to_ov(v);
    const QemuOpt *opt;
@@ -469,7 +469,7 @@ opts_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)


static void
opts_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp)
opts_type_size(Visitor *v, const char *name, uint64_t *obj, Error **errp)
{
    OptsVisitor *ov = to_ov(v);
    const QemuOpt *opt;
@@ -495,7 +495,7 @@ opts_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp)


static void
opts_optional(Visitor *v, bool *present, const char *name)
opts_optional(Visitor *v, const char *name, bool *present)
{
    OptsVisitor *ov = to_ov(v);

+12 −13
Original line number Diff line number Diff line
@@ -59,8 +59,8 @@ static void *qapi_dealloc_pop(QapiDeallocVisitor *qov)
    return value;
}

static void qapi_dealloc_start_struct(Visitor *v, void **obj, const char *kind,
                                      const char *name, size_t unused,
static void qapi_dealloc_start_struct(Visitor *v, const char *name, void **obj,
                                      const char *kind, size_t unused,
                                      Error **errp)
{
    QapiDeallocVisitor *qov = to_qov(v);
@@ -128,7 +128,7 @@ static void qapi_dealloc_end_list(Visitor *v, Error **errp)
    assert(obj == NULL); /* should've been list head tracker with no payload */
}

static void qapi_dealloc_type_str(Visitor *v, char **obj, const char *name,
static void qapi_dealloc_type_str(Visitor *v, const char *name, char **obj,
                                  Error **errp)
{
    if (obj) {
@@ -136,38 +136,37 @@ static void qapi_dealloc_type_str(Visitor *v, char **obj, const char *name,
    }
}

static void qapi_dealloc_type_int64(Visitor *v, int64_t *obj, const char *name,
static void qapi_dealloc_type_int64(Visitor *v, const char *name, int64_t *obj,
                                    Error **errp)
{
}

static void qapi_dealloc_type_uint64(Visitor *v, uint64_t *obj,
                                     const char *name, Error **errp)
static void qapi_dealloc_type_uint64(Visitor *v, const char *name,
                                     uint64_t *obj, Error **errp)
{
}

static void qapi_dealloc_type_bool(Visitor *v, bool *obj, const char *name,
static void qapi_dealloc_type_bool(Visitor *v, const char *name, bool *obj,
                                   Error **errp)
{
}

static void qapi_dealloc_type_number(Visitor *v, double *obj, const char *name,
static void qapi_dealloc_type_number(Visitor *v, const char *name, double *obj,
                                     Error **errp)
{
}

static void qapi_dealloc_type_anything(Visitor *v, QObject **obj,
                                       const char *name, Error **errp)
static void qapi_dealloc_type_anything(Visitor *v, const char *name,
                                       QObject **obj, Error **errp)
{
    if (obj) {
        qobject_decref(*obj);
    }
}

static void qapi_dealloc_type_enum(Visitor *v, int *obj,
static void qapi_dealloc_type_enum(Visitor *v, const char *name, int *obj,
                                   const char * const strings[],
                                   const char *kind, const char *name,
                                   Error **errp)
                                   const char *kind, Error **errp)
{
}

+19 −19
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
void visit_start_struct(Visitor *v, const char *name, void **obj,
                        const char *kind, size_t size, Error **errp)
{
    v->start_struct(v, obj, kind, name, size, errp);
    v->start_struct(v, name, obj, kind, size, errp);
}

void visit_end_struct(Visitor *v, Error **errp)
@@ -71,7 +71,7 @@ bool visit_start_union(Visitor *v, bool data_present, Error **errp)
bool visit_optional(Visitor *v, const char *name, bool *present)
{
    if (v->optional) {
        v->optional(v, present, name);
        v->optional(v, name, present);
    }
    return *present;
}
@@ -80,7 +80,7 @@ void visit_get_next_type(Visitor *v, const char *name, QType *type,
                         bool promote_int, Error **errp)
{
    if (v->get_next_type) {
        v->get_next_type(v, type, promote_int, name, errp);
        v->get_next_type(v, name, type, promote_int, errp);
    }
}

@@ -88,12 +88,12 @@ void visit_type_enum(Visitor *v, const char *name, int *obj,
                     const char *const strings[], const char *kind,
                     Error **errp)
{
    v->type_enum(v, obj, strings, kind, name, errp);
    v->type_enum(v, name, obj, strings, kind, errp);
}

void visit_type_int(Visitor *v, const char *name, int64_t *obj, Error **errp)
{
    v->type_int64(v, obj, name, errp);
    v->type_int64(v, name, obj, errp);
}

static void visit_type_uintN(Visitor *v, uint64_t *obj, const char *name,
@@ -102,7 +102,7 @@ static void visit_type_uintN(Visitor *v, uint64_t *obj, const char *name,
    Error *err = NULL;
    uint64_t value = *obj;

    v->type_uint64(v, &value, name, &err);
    v->type_uint64(v, name, &value, &err);
    if (err) {
        error_propagate(errp, err);
    } else if (value > max) {
@@ -140,7 +140,7 @@ void visit_type_uint32(Visitor *v, const char *name, uint32_t *obj,
void visit_type_uint64(Visitor *v, const char *name, uint64_t *obj,
                       Error **errp)
{
    v->type_uint64(v, obj, name, errp);
    v->type_uint64(v, name, obj, errp);
}

static void visit_type_intN(Visitor *v, int64_t *obj, const char *name,
@@ -150,7 +150,7 @@ static void visit_type_intN(Visitor *v, int64_t *obj, const char *name,
    Error *err = NULL;
    int64_t value = *obj;

    v->type_int64(v, &value, name, &err);
    v->type_int64(v, name, &value, &err);
    if (err) {
        error_propagate(errp, err);
    } else if (value < min || value > max) {
@@ -187,42 +187,42 @@ void visit_type_int32(Visitor *v, const char *name, int32_t *obj,
void visit_type_int64(Visitor *v, const char *name, int64_t *obj,
                      Error **errp)
{
    v->type_int64(v, obj, name, errp);
    v->type_int64(v, name, obj, errp);
}

void visit_type_size(Visitor *v, const char *name, uint64_t *obj,
                     Error **errp)
{
    if (v->type_size) {
        v->type_size(v, obj, name, errp);
        v->type_size(v, name, obj, errp);
    } else {
        v->type_uint64(v, obj, name, errp);
        v->type_uint64(v, name, obj, errp);
    }
}

void visit_type_bool(Visitor *v, const char *name, bool *obj, Error **errp)
{
    v->type_bool(v, obj, name, errp);
    v->type_bool(v, name, obj, errp);
}

void visit_type_str(Visitor *v, const char *name, char **obj, Error **errp)
{
    v->type_str(v, obj, name, errp);
    v->type_str(v, name, obj, errp);
}

void visit_type_number(Visitor *v, const char *name, double *obj,
                       Error **errp)
{
    v->type_number(v, obj, name, errp);
    v->type_number(v, name, obj, errp);
}

void visit_type_any(Visitor *v, const char *name, QObject **obj, Error **errp)
{
    v->type_any(v, obj, name, errp);
    v->type_any(v, name, obj, errp);
}

void output_type_enum(Visitor *v, int *obj, const char * const strings[],
                      const char *kind, const char *name,
void output_type_enum(Visitor *v, const char *name, int *obj,
                      const char *const strings[], const char *kind,
                      Error **errp)
{
    int i = 0;
@@ -240,8 +240,8 @@ void output_type_enum(Visitor *v, int *obj, const char * const strings[],
    visit_type_str(v, name, &enum_str, errp);
}

void input_type_enum(Visitor *v, int *obj, const char * const strings[],
                     const char *kind, const char *name,
void input_type_enum(Visitor *v, const char *name, int *obj,
                     const char *const strings[], const char *kind,
                     Error **errp)
{
    Error *local_err = NULL;
+11 −11
Original line number Diff line number Diff line
@@ -115,8 +115,8 @@ static void qmp_input_pop(QmpInputVisitor *qiv, Error **errp)
    qiv->nb_stack--;
}

static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind,
                                   const char *name, size_t size, Error **errp)
static void qmp_input_start_struct(Visitor *v, const char *name, void **obj,
                                   const char *kind, size_t size, Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
    QObject *qobj = qmp_input_get_object(qiv, name, true);
@@ -209,8 +209,8 @@ static void qmp_input_end_list(Visitor *v, Error **errp)
    qmp_input_pop(qiv, errp);
}

static void qmp_input_get_next_type(Visitor *v, QType *type, bool promote_int,
                                    const char *name, Error **errp)
static void qmp_input_get_next_type(Visitor *v, const char *name, QType *type,
                                    bool promote_int, Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
    QObject *qobj = qmp_input_get_object(qiv, name, false);
@@ -225,7 +225,7 @@ static void qmp_input_get_next_type(Visitor *v, QType *type, bool promote_int,
    }
}

static void qmp_input_type_int64(Visitor *v, int64_t *obj, const char *name,
static void qmp_input_type_int64(Visitor *v, const char *name, int64_t *obj,
                                 Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
@@ -240,7 +240,7 @@ static void qmp_input_type_int64(Visitor *v, int64_t *obj, const char *name,
    *obj = qint_get_int(qint);
}

static void qmp_input_type_uint64(Visitor *v, uint64_t *obj, const char *name,
static void qmp_input_type_uint64(Visitor *v, const char *name, uint64_t *obj,
                                  Error **errp)
{
    /* FIXME: qobject_to_qint mishandles values over INT64_MAX */
@@ -256,7 +256,7 @@ static void qmp_input_type_uint64(Visitor *v, uint64_t *obj, const char *name,
    *obj = qint_get_int(qint);
}

static void qmp_input_type_bool(Visitor *v, bool *obj, const char *name,
static void qmp_input_type_bool(Visitor *v, const char *name, bool *obj,
                                Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
@@ -271,7 +271,7 @@ static void qmp_input_type_bool(Visitor *v, bool *obj, const char *name,
    *obj = qbool_get_bool(qbool);
}

static void qmp_input_type_str(Visitor *v, char **obj, const char *name,
static void qmp_input_type_str(Visitor *v, const char *name, char **obj,
                               Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
@@ -286,7 +286,7 @@ static void qmp_input_type_str(Visitor *v, char **obj, const char *name,
    *obj = g_strdup(qstring_get_str(qstr));
}

static void qmp_input_type_number(Visitor *v, double *obj, const char *name,
static void qmp_input_type_number(Visitor *v, const char *name, double *obj,
                                  Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
@@ -310,7 +310,7 @@ static void qmp_input_type_number(Visitor *v, double *obj, const char *name,
               "number");
}

static void qmp_input_type_any(Visitor *v, QObject **obj, const char *name,
static void qmp_input_type_any(Visitor *v, const char *name, QObject **obj,
                               Error **errp)
{
    QmpInputVisitor *qiv = to_qiv(v);
@@ -320,7 +320,7 @@ static void qmp_input_type_any(Visitor *v, QObject **obj, const char *name,
    *obj = qobj;
}

static void qmp_input_optional(Visitor *v, bool *present, const char *name)
static void qmp_input_optional(Visitor *v, const char *name, bool *present)
{
    QmpInputVisitor *qiv = to_qiv(v);
    QObject *qobj = qmp_input_get_object(qiv, name, true);
Loading