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