version 1.8.4.2, 2012/07/30 10:45:16
|
version 1.8.4.4, 2012/07/30 11:44:35
|
Line 359 int
|
Line 359 int
|
cfgReadLines(FILE *f, const char *delim, const char *end, cfg_root_t * __restrict cfg) |
cfgReadLines(FILE *f, const char *delim, const char *end, cfg_root_t * __restrict cfg) |
{ |
{ |
char line[BUFSIZ]; |
char line[BUFSIZ]; |
struct tagCfg *av = NULL; | struct tagCfg *d, *av = NULL; |
char *psAttr, *psVal = NULL; |
char *psAttr, *psVal = NULL; |
int ret; |
|
|
|
while (!feof(f)) { |
while (!feof(f)) { |
memset(line, 0, sizeof line); |
memset(line, 0, sizeof line); |
fgets(line, sizeof line - 1, f); |
fgets(line, sizeof line - 1, f); |
/* check for user end-of-file */ |
/* check for user end-of-file */ |
if (!strspn(line, end)) | if (strspn(line, end)) |
break; |
break; |
|
|
if (!(psAttr = strpbrk(line, "\r\n"))) { |
if (!(psAttr = strpbrk(line, "\r\n"))) { |
Line 380 cfgReadLines(FILE *f, const char *delim, const char *e
|
Line 379 cfgReadLines(FILE *f, const char *delim, const char *e
|
continue; |
continue; |
} |
} |
|
|
ret = io_MakeAV2((char**) &line, delim, psAttr, psVal); | if (!io_MakeAV2(line, delim, &psAttr, &psVal)) |
io_LTrimStr(psVal); | continue; |
io_RTrimStr(psAttr); | else { |
| io_LTrimStr(psVal); |
| io_RTrimStr(psAttr); |
| } |
|
|
/* *NEW PAIR* alloc new pair element */ |
/* *NEW PAIR* alloc new pair element */ |
av = io_malloc(sizeof(struct tagCfg)); |
av = io_malloc(sizeof(struct tagCfg)); |
if (!av) { |
if (!av) { |
LOGERR; |
LOGERR; |
return -1; |
return -1; |
} else { | } else |
memset(av, 0, sizeof(struct tagCfg)); |
memset(av, 0, sizeof(struct tagCfg)); |
CFG_RC_LOCK(cfg); |
|
SLIST_INSERT_HEAD(cfg, av, cfg_next); |
|
CFG_RC_UNLOCK(cfg); |
|
} |
|
|
|
AIT_SET_STR(&av->cfg_val, psVal ? psVal : ""); | if (psVal) |
| AIT_SET_STR(&av->cfg_val, psVal); |
AIT_SET_STR(&av->cfg_attr, psAttr); |
AIT_SET_STR(&av->cfg_attr, psAttr); |
AIT_KEY(&av->cfg_attr) = crcFletcher16(AIT_GET_LIKE(&av->cfg_attr, u_short*), |
AIT_KEY(&av->cfg_attr) = crcFletcher16(AIT_GET_LIKE(&av->cfg_attr, u_short*), |
io_align(AIT_LEN(&av->cfg_attr) - 1, 1) / 2); |
io_align(AIT_LEN(&av->cfg_attr) - 1, 1) / 2); |
|
|
CFG_RC_LOCK(cfg); |
CFG_RC_LOCK(cfg); |
|
/* find & delete duplicates */ |
|
if ((d = RB_FIND(tagRC, cfg, av))) { |
|
RB_REMOVE(tagRC, cfg, d); |
|
SLIST_REMOVE(cfg, d, tagCfg, cfg_next); |
|
|
|
AIT_FREE_VAL(&d->cfg_val); |
|
AIT_FREE_VAL(&d->cfg_attr); |
|
AIT_FREE_VAL(&d->cfg_sec); |
|
io_free(d); |
|
} |
|
|
|
SLIST_INSERT_HEAD(cfg, av, cfg_next); |
RB_INSERT(tagRC, cfg, av); |
RB_INSERT(tagRC, cfg, av); |
CFG_RC_UNLOCK(cfg); |
CFG_RC_UNLOCK(cfg); |
} |
} |