Revision 43c20a43

b/Makefile.objs
376 376
# qapi
377 377

  
378 378
qapi-nested-y = qapi-visit-core.o qmp-input-visitor.o qmp-output-visitor.o qapi-dealloc-visitor.o
379
qapi-nested-y += qmp-registry.o
379 380
qapi-obj-y = $(addprefix qapi/, $(qapi-nested-y))
380 381

  
381 382
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
b/qapi/qmp-core.h
1
/*
2
 * Core Definitions for QAPI/QMP Dispatch
3
 *
4
 * Copyright IBM, Corp. 2011
5
 *
6
 * Authors:
7
 *  Anthony Liguori   <aliguori@us.ibm.com>
8
 *
9
 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10
 * See the COPYING.LIB file in the top-level directory.
11
 *
12
 */
13

  
14
#ifndef QMP_CORE_H
15
#define QMP_CORE_H
16

  
17
#include "qobject.h"
18
#include "qdict.h"
19
#include "error.h"
20

  
21
typedef void (QmpCommandFunc)(QDict *, QObject **, Error **);
22

  
23
typedef enum QmpCommandType
24
{
25
    QCT_NORMAL,
26
} QmpCommandType;
27

  
28
typedef struct QmpCommand
29
{
30
    const char *name;
31
    QmpCommandType type;
32
    QmpCommandFunc *fn;
33
    QTAILQ_ENTRY(QmpCommand) node;
34
} QmpCommand;
35

  
36
void qmp_register_command(const char *name, QmpCommandFunc *fn);
37
QmpCommand *qmp_find_command(const char *name);
38

  
39
#endif
b/qapi/qmp-registry.c
1
/*
2
 * Core Definitions for QAPI/QMP Dispatch
3
 *
4
 * Copyright IBM, Corp. 2011
5
 *
6
 * Authors:
7
 *  Anthony Liguori   <aliguori@us.ibm.com>
8
 *  Michael Roth      <mdroth@us.ibm.com>
9
 *
10
 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
11
 * See the COPYING.LIB file in the top-level directory.
12
 *
13
 */
14

  
15
#include "qapi/qmp-core.h"
16

  
17
static QTAILQ_HEAD(, QmpCommand) qmp_commands =
18
    QTAILQ_HEAD_INITIALIZER(qmp_commands);
19

  
20
void qmp_register_command(const char *name, QmpCommandFunc *fn)
21
{
22
    QmpCommand *cmd = qemu_mallocz(sizeof(*cmd));
23

  
24
    cmd->name = name;
25
    cmd->type = QCT_NORMAL;
26
    cmd->fn = fn;
27
    QTAILQ_INSERT_TAIL(&qmp_commands, cmd, node);
28
}
29

  
30
QmpCommand *qmp_find_command(const char *name)
31
{
32
    QmpCommand *i;
33

  
34
    QTAILQ_FOREACH(i, &qmp_commands, node) {
35
        if (strcmp(i->name, name) == 0) {
36
            return i;
37
        }
38
    }
39
    return NULL;
40
}

Also available in: Unified diff