Annotation of qemu/qga/guest-agent-command-state.c, revision 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.