long ei_reg_getival(ei_reg *reg, const char *key) { ei_hash *tab; ei_reg_obj *obj=NULL; if (!key || !reg) return -1; /* return EI_BADARG; */ tab = reg->tab; if (!(obj=ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ if (obj->attr & EI_DELET) return -1; /* return EI_NOTFOUND; */ if (ei_reg_typeof(obj) != EI_INT) return -1; /* return EI_TYPE; */ return obj->val.i; }
int ei_reg_markdirty(ei_reg *reg, const char *key) { ei_hash *tab; ei_reg_obj *obj; if (!key || !reg) return -1; /* EI_BADARG; */ tab = reg->tab; if (!(obj = ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ /* just mark the object dirty */ obj->attr |= EI_DIRTY; return 0; }
int ei_reg_delete(ei_reg *reg, const char *key) { ei_hash *tab; ei_reg_obj *obj; if (!key || !reg) return -1; /* return EI_BADARG; */ tab = reg->tab; if (!(obj = ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ /* just mark the object deleted */ obj->attr |= (EI_DELET | EI_DIRTY); return 0; }
/* Get object attributes. * This function returns a COPY of the ei_reg_obj * struct for an object. */ int ei_reg_stat(ei_reg *reg, const char *key, struct ei_reg_stat *obuf) { ei_hash *tab; ei_reg_obj *obj; if (!key || !obuf || !reg) return -1; /* return EI_BADARG; */ tab = reg->tab; if (!(obj=ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ obuf->attr = obj->attr; obuf->size = obj->size; return 0; }
const char *ei_reg_getsval(ei_reg *reg, const char *key) { ei_hash *tab; ei_reg_obj *obj=NULL; if (!key || !reg) return NULL; /* return (const char *)EI_BADARG; */ tab = reg->tab; if ((!(obj=ei_hash_lookup(tab,key))) || /* return (const char *)EI_NOTFOUND; */ (obj->attr & EI_DELET) || /* return (const char *)EI_NOTFOUND; */ (ei_reg_typeof(obj) != EI_STR)) /* return (const char *)EI_TYPE; */ return NULL; return obj->val.s; }
const void *ei_reg_getpval(ei_reg *reg, const char *key, int *size) { ei_hash *tab; ei_reg_obj *obj; if (!key || !reg) return NULL; tab = reg->tab; if ((!(obj=ei_hash_lookup(tab,key))) || /* return (const void *)EI_NOTFOUND; */ (obj->attr & EI_DELET) || /* return (const void *)EI_NOTFOUND; */ (ei_reg_typeof(obj) != EI_STR)) /* return (const void *)EI_TYPE; */ return NULL; if (size) *size=obj->size; return obj->val.p; }
int ei_reg_setsval(ei_reg *reg, const char *key, const char *s) { ei_hash *tab; ei_reg_obj *obj=NULL; int len = 0; if (!key || !reg) return -1; /* return EI_BADARG; */ tab = reg->tab; if (s) len = strlen(s) +1; if ((obj=ei_hash_lookup(tab,key))) { /* object with same name already exists */ switch (ei_reg_typeof(obj)) { case EI_INT: break; case EI_FLT: break; case EI_STR: if (obj->size > 0) free(obj->val.s); break; case EI_BIN: if (obj->size > 0) free(obj->val.p); break; default: return -1; /* return EI_UNKNOWN; */ } } else { /* object is new */ if (!(obj=ei_reg_make(reg,EI_STR))) return -1; /* return EI_NOMEM; */ ei_hash_insert(tab,key,obj); } obj->attr = EI_STR | EI_DIRTY; obj->val.s=(char *)s; obj->size = len; return 0; }