Exemplo n.º 1
0
static int set_traps_enabled(int val, void *param)
{
    int new_value = val ? 1 : 0;

    if ((!traps_enabled && new_value) || (traps_enabled && !new_value)) {
        if (!new_value) {
            /* Traps have been disabled.  */
            traplist_t *p;

            for (p = traplist; p != NULL; p = p->next) {
                remove_trap(p->trap);
            }
        } else {
            /* Traps have been enabled.  */
            traplist_t *p;

            for (p = traplist; p != NULL; p = p->next) {
                install_trap(p->trap);
            }
        }
    }

    traps_enabled = new_value;

    machine_bus_status_virtualdevices_set((unsigned int)new_value);

    return 0;
}
Exemplo n.º 2
0
int traps_remove(const trap_t *trap)
{
    traplist_t *p = traplist, *prev = NULL;

    while (p) {
        if (p->trap->address == trap->address) {
            break;
        }
        prev = p;
        p = p->next;
    }

    if (!p) {
        log_error(traps_log, "Trap `%s' not found.", trap->name);
        return -1;
    }

    if (prev) {
        prev->next = p->next;
    } else {
        traplist = p->next;
    }

    lib_free(p);

    if (traps_enabled) {
        remove_trap(trap);
    }

    return 0;
}
Exemplo n.º 3
0
void traps_refresh(void)
{
    if (traps_enabled) {
        traplist_t *p;

        for (p = traplist; p != NULL; p = p->next) {
            remove_trap(p->trap);
            install_trap(p->trap);
        }
    }
    return;
}
Exemplo n.º 4
0
void drakvuf_remove_trap(drakvuf_t drakvuf, drakvuf_trap_t *trap,
                         void(*free_routine)(drakvuf_trap_t *trap))
{
    if ( drakvuf->in_callback) {
        struct free_trap_wrapper *free_wrapper =
            g_hash_table_lookup(drakvuf->remove_traps, &trap);

        if (!free_wrapper) {
            free_wrapper = g_malloc0(sizeof(struct free_trap_wrapper));
            free_wrapper->free_routine = free_routine;
            free_wrapper->trap = trap;
            g_hash_table_insert(drakvuf->remove_traps,
                                g_memdup(&trap, sizeof(void*)),
                                free_wrapper);
        }

        free_wrapper->counter++;
    } else {
        remove_trap(drakvuf, trap);
        if(free_routine)
            free_routine(trap);
    }
}