|
|
| version 1.14.4.1, 2014/03/19 16:35:29 | version 1.14.4.4, 2014/03/19 18:36:08 |
|---|---|
| Line 72 _selectAttribute(cfg_root_t * __restrict cfg, const ch | Line 72 _selectAttribute(cfg_root_t * __restrict cfg, const ch |
| do { | do { |
| if (!strcmp(AIT_GET_STR(&c->cfg_attr), csAttr)) | if (!strcmp(AIT_GET_STR(&c->cfg_attr), csAttr)) |
| return c; /* FOUND! */ | return c; /* FOUND! */ |
| } while (RB_NEXT(tagRC, cfg, c) && !cfg_tree_cmp(c, &fav)); | } while ((c = RB_NEXT(tagRC, cfg, c)) && c && !cfg_tree_cmp(c, &fav)); |
| return NULL; /* not found */ | return NULL; /* not found */ |
| } | } |
| } | } |
| /* --------------------------------------------------------------- */ | /* --------------------------------------------------------------- */ |
| /* | |
| * cfg_getSection() - Get entire section attributes into array | |
| * | |
| * @cfg = Config root | |
| * @csSec = Config section //[{csSec}] | |
| * return: NULL not found or !=NULL allocated array, must free with array_Destroy() after use! | |
| */ | |
| array_t * | |
| cfg_getSection(cfg_root_t * __restrict cfg, const char *csSec) | |
| { | |
| array_t *arr = NULL; | |
| struct tagCfg *av, fav; | |
| if (!cfg) { | |
| cfg_SetErr(EINVAL, "Invalid argument(s)"); | |
| return NULL; | |
| } else | |
| memset(&fav, 0, sizeof fav); | |
| if (csSec && !*csSec) | |
| csSec = NULL; | |
| if (csSec && *csSec) | |
| AIT_KEY(&fav.cfg_sec) = crcFletcher16((u_short*) csSec, | |
| E_ALIGN(strlen(csSec), 2) / 2); | |
| av = RB_NFIND(tagRC, cfg, &fav); | |
| if (!av) | |
| return NULL; | |
| if (csSec) { | |
| if (AIT_ISEMPTY(&av->cfg_sec) || strcmp(AIT_GET_STR(&av->cfg_sec), csSec)) | |
| return NULL; | |
| } else { | |
| if (!AIT_ISEMPTY(&av->cfg_sec)) | |
| return NULL; | |
| } | |
| arr = array_Init(1); | |
| if (!arr) { | |
| cfg_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); | |
| return NULL; | |
| } else | |
| array_Push(arr, av, 0); | |
| while ((av = RB_NEXT(tagRC, cfg, av)) && av) { | |
| if (csSec) { | |
| if (AIT_ISEMPTY(&av->cfg_sec) || strcmp(AIT_GET_STR(&av->cfg_sec), csSec)) | |
| break; | |
| } else { | |
| if (!AIT_ISEMPTY(&av->cfg_sec)) | |
| break; | |
| } | |
| array_Push(arr, av, 0); | |
| } | |
| return arr; | |
| } | |
| /* | /* |
| * cfg_findAttribute() - Find attribute position in config file | * cfg_findAttribute() - Find attribute position in config file |