Index: ossp-pkg/val/val.c RCS File: /v/ossp/cvs/ossp-pkg/val/val.c,v rcsdiff -q -kk '-r1.5' '-r1.6' -u '/v/ossp/cvs/ossp-pkg/val/val.c,v' 2>/dev/null --- val.c 2002/01/16 20:32:23 1.5 +++ val.c 2002/01/17 12:19:09 1.6 @@ -722,6 +722,41 @@ return VAL_OK; } +val_rc_t val_unreg(val_t *val, const char *name) +{ + val_object_t *obj; + const char *cp; + val_t *child; + + /* argument consistency check */ + if (val == NULL || name == NULL) + return VAL_ERR_ARG; + + /* recursive step-down on structured name */ + if ((cp = strchr(name, '.')) != NULL) { + if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL)) + return VAL_ERR_ARG; + if (!(obj->type & VAL_TYPE_VAL)) + return VAL_ERR_USE; + child = *(val_t **)(val_storage(obj)); + return val_unreg(child, cp+1); + } + + /* try to lookup object in hash table */ + if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL)) + return VAL_ERR_ARG; + + /* destroy value object */ + if (obj->desc != NULL) + free(obj->desc); + + /* delete value from hash table */ + if (!lh_delete(val->lh, name, strlen(name))) + return VAL_ERR_HSH; + + return VAL_OK; +} + /* query information about a value */ val_rc_t val_query(val_t *val, const char *name, int *ptype, char **pdesc, void **pstorage) Index: ossp-pkg/val/val.h RCS File: /v/ossp/cvs/ossp-pkg/val/val.h,v rcsdiff -q -kk '-r1.4' '-r1.5' -u '/v/ossp/cvs/ossp-pkg/val/val.h,v' 2>/dev/null --- val.h 2002/01/16 20:32:23 1.4 +++ val.h 2002/01/17 12:19:09 1.5 @@ -70,6 +70,7 @@ val_rc_t val_create (val_t **); val_rc_t val_destroy (val_t *); val_rc_t val_reg (val_t *, const char *, int, const char *, void *); +val_rc_t val_unreg (val_t *, const char *); val_rc_t val_query (val_t *, const char *, int *, char **, void **); val_rc_t val_set (val_t *, const char *, ...); val_rc_t val_get (val_t *, const char *, ...); Index: ossp-pkg/val/val.pod RCS File: /v/ossp/cvs/ossp-pkg/val/val.pod,v rcsdiff -q -kk '-r1.6' '-r1.7' -u '/v/ossp/cvs/ossp-pkg/val/val.pod,v' 2>/dev/null --- val.pod 2002/01/17 11:50:06 1.6 +++ val.pod 2002/01/17 12:19:09 1.7 @@ -68,6 +68,7 @@ C, C, C, +C, C, C, C, @@ -179,6 +180,10 @@ can only be access through B(), B() or after the actual storage address was queried using B(). +=item val_rc_t B(val_t *I, const char *I); + +Unregisters a variable I in I. + =item val_rc_t B(val_t *I, const char *I, int *I, char **I, void **I); Queries a variable I in I and returns it's type, description and