version 1.6.4.2, 2012/04/02 15:12:15
|
version 1.6.4.4, 2012/04/02 16:00:00
|
Line 85 _destroyAttribute(struct tagCfg *av)
|
Line 85 _destroyAttribute(struct tagCfg *av)
|
if (!av) |
if (!av) |
return; |
return; |
|
|
AIT_FREE_VAL(&av->cfg_val); |
|
AIT_FREE_VAL(&av->cfg_attr); |
|
AIT_FREE_VAL(&av->cfg_sec); |
|
free(av); |
|
} |
} |
|
|
// ---------------------------------------------- |
// ---------------------------------------------- |
Line 128 cfg_findAttribute(cfg_root_t * __restrict cfg, const c
|
Line 124 cfg_findAttribute(cfg_root_t * __restrict cfg, const c
|
|
|
return 0; |
return 0; |
} |
} |
#if 0 | |
/* |
/* |
* cfg_UnsetAttribute() Unset item from config list and free resources | * cfg_unsetAttribute() - Unset item from config and free resources |
* @cfg = Head list element | * |
| * @cfg = Config root |
* @csSec = Config section //[{csSec}], if NULL unset in *default* section |
* @csSec = Config section //[{csSec}], if NULL unset in *default* section |
* @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute | * @csAttr = Config attribute //{csAttr} = ... |
* return: 0 item not found, -1 error: null parameters; >0 position in list | * return: 0 item not found, -1 error or 1 removed item |
*/ | */ |
int cfg_UnsetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr) | int |
| cfg_unsetAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr) |
{ |
{ |
struct tagPair *av, *curr; | struct tagCfg *av; |
register int cx = 0; | |
|
|
if (!cfg || !csAttr) |
if (!cfg || !csAttr) |
return -1; |
return -1; |
|
|
av = SelectAttribute(cfg, csSec, csAttr); | av = _selectAttribute(cfg, csSec, csAttr); |
if (!av) |
if (!av) |
return 0; |
return 0; |
|
|
// remove element | CFG_RC_LOCK(cfg); |
// remove element when is first! | RB_REMOVE(tagRC, cfg, av); |
if (cfg->slh_first == av) { | SLIST_REMOVE(cfg, av, tagCfg, cfg_next); |
cfg->slh_first = cfg->slh_first->sle_next; | CFG_RC_UNLOCK(cfg); |
|
|
DestroyAttribute(av); | AIT_FREE_VAL(&av->cfg_val); |
return 1; | AIT_FREE_VAL(&av->cfg_attr); |
} | AIT_FREE_VAL(&av->cfg_sec); |
// remove element in other cases... | free(av); |
curr = cfg->slh_first; | return 1; |
while (curr->sle_next != av) { | |
++cx; | |
curr = curr->sle_next; | |
} | |
curr->sle_next = curr->sle_next->sle_next; | |
| |
DestroyAttribute(av); | |
return cx; | |
} |
} |
#endif |
|
|
|
/* |
/* |
* cfg_setAttribute() - Set item in config or adding new item if not exists |
* cfg_setAttribute() - Set item in config or adding new item if not exists |
Line 255 cfg_getAttribute(cfg_root_t * __restrict cfg, const ch
|
Line 243 cfg_getAttribute(cfg_root_t * __restrict cfg, const ch
|
|
|
return AIT_GET_STR(&av->cfg_val); |
return AIT_GET_STR(&av->cfg_val); |
} |
} |
#if 0 |
|
// -------------------------------------------------------------- |
|
|
|
/* |
/* |
* cfg_LoadAttribute() Extended get attribute, if not found item return *default value* | * cfg_loadAttribute() - Get guarded attribute, if not found item return *default value* |
* @cfg = Head list element | * |
| * @cfg = Config root |
* @csSec = Config section //[{csSec}], if NULL unset in *default* section |
* @csSec = Config section //[{csSec}], if NULL unset in *default* section |
* @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute | * @csAttr = Config attribute //{csAttr} = ... |
* @psVal = Return buffer for item Value //... = {psVal} | * @val = Return buffer for item Value //... = {val} |
* @ValLen = Length of buffer //{psVal} for return | * @csDefValue = *Default Value* for return in //{val}, if not found item in config |
* @csDefValue = *Default Value* for return in //{psVal}, if not found item in config list | * return: 0 item not found, -1 error or >0 number of copied bytes in //{val} |
* return: 0 item not found, -1 error: null parameters; >0 number of copied bytes in //{psVal} | */ |
*/ | int |
int cfg_LoadAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr, | cfg_loadAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr, |
u_char * __restrict psVal, int ValLen, const char *csDefValue) | ait_val_t * __restrict val, const char *csDefValue) |
{ |
{ |
struct tagPair *av; | struct tagCfg *av; |
int ret = 0; |
int ret = 0; |
|
|
if (!cfg || !csAttr || !ValLen || !psVal) | if (!cfg || !csAttr || !val) { |
| cfg_SetErr(EINVAL, "Invalid argument(s)"); |
return -1; |
return -1; |
|
} |
|
|
av = SelectAttribute(cfg, csSec, csAttr); | av = _selectAttribute(cfg, csSec, csAttr); |
if (!av) { |
if (!av) { |
|
/* not found item */ |
if (csDefValue) { |
if (csDefValue) { |
strlcpy((char*) psVal, csDefValue, ValLen); | AIT_SET_STR(val, csDefValue); |
ret = strlen((char*) psVal); | ret = AIT_LEN(val); |
} |
} |
|
|
return ret; |
return ret; |
} |
} |
|
|
if (!av->psValue || !*av->psValue) { | if (AIT_ISEMPTY(&av->cfg_val) || !*AIT_GET_LIKE(&av->cfg_val, char*)) { |
| /* empty value */ |
if (csDefValue) { |
if (csDefValue) { |
strlcpy((char*) psVal, csDefValue, ValLen); | AIT_SET_STR(val, csDefValue); |
ret = strlen((char*) psVal); | ret = AIT_LEN(val); |
} |
} |
} else { |
} else { |
strlcpy((char*) psVal, (char*) av->psValue, ValLen); | /* copy value */ |
ret = strlen((char*) psVal); | AIT_SET_STR(val, AIT_GET_STR(&av->cfg_val)); |
| ret = AIT_LEN(val); |
} |
} |
|
|
return ret; |
return ret; |
} |
} |
#endif |
|