#include "var-map.h" static void var_entry_cleanup(fx_namemap_entry *entry) { struct var_map_entry *map_entry = fx_unbox(struct var_map_entry, entry, e_entry); bshell_variable_unref(map_entry->e_var); free(map_entry); } void var_map_cleanup(struct var_map *map) { fx_namemap_cleanup(&map->m_vars, var_entry_cleanup); } enum bshell_status var_map_put(struct var_map *map, bshell_variable *var) { const char *name = bshell_variable_get_name(var); struct var_map_entry *entry = malloc(sizeof *entry); if (!entry) { return BSHELL_ERR_NO_MEMORY; } memset(entry, 0x0, sizeof *entry); entry->e_var = var; fx_namemap_put(&map->m_vars, name, &entry->e_entry); return BSHELL_SUCCESS; } bshell_variable *var_map_get(struct var_map *map, const char *name) { fx_namemap_entry *e = fx_namemap_get(&map->m_vars, name); if (!e) { return NULL; } struct var_map_entry *entry = fx_unbox(struct var_map_entry, e, e_entry); return entry->e_var; }