|
|
1.1 root 1: /*
2: * QEMU Guest Agent command state interfaces
3: *
4: * Copyright IBM Corp. 2011
5: *
6: * Authors:
7: * Michael Roth <[email protected]>
8: *
9: * This work is licensed under the terms of the GNU GPL, version 2 or later.
10: * See the COPYING file in the top-level directory.
11: */
12: #include <glib.h>
13: #include "qga/guest-agent-core.h"
14:
15: struct GACommandState {
16: GSList *groups;
17: };
18:
19: typedef struct GACommandGroup {
20: void (*init)(void);
21: void (*cleanup)(void);
22: } GACommandGroup;
23:
24: /* handle init/cleanup for stateful guest commands */
25:
26: void ga_command_state_add(GACommandState *cs,
27: void (*init)(void),
28: void (*cleanup)(void))
29: {
30: GACommandGroup *cg = qemu_mallocz(sizeof(GACommandGroup));
31: cg->init = init;
32: cg->cleanup = cleanup;
33: cs->groups = g_slist_append(cs->groups, cg);
34: }
35:
36: static void ga_command_group_init(gpointer opaque, gpointer unused)
37: {
38: GACommandGroup *cg = opaque;
39:
40: g_assert(cg);
41: if (cg->init) {
42: cg->init();
43: }
44: }
45:
46: void ga_command_state_init_all(GACommandState *cs)
47: {
48: g_assert(cs);
49: g_slist_foreach(cs->groups, ga_command_group_init, NULL);
50: }
51:
52: static void ga_command_group_cleanup(gpointer opaque, gpointer unused)
53: {
54: GACommandGroup *cg = opaque;
55:
56: g_assert(cg);
57: if (cg->cleanup) {
58: cg->cleanup();
59: }
60: }
61:
62: void ga_command_state_cleanup_all(GACommandState *cs)
63: {
64: g_assert(cs);
65: g_slist_foreach(cs->groups, ga_command_group_cleanup, NULL);
66: }
67:
68: GACommandState *ga_command_state_new(void)
69: {
70: GACommandState *cs = qemu_mallocz(sizeof(GACommandState));
71: cs->groups = NULL;
72: return cs;
73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.