Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
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;
}
Пример #4
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;
}
Пример #5
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;
}
Пример #6
0
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;
}
Пример #7
0
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;
}