Annotation of qemu/qga/guest-agent-command-state.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.