--- libaitcfg/src/parse.c 2014/01/30 08:13:09 1.13.2.1 +++ libaitcfg/src/parse.c 2017/06/28 15:13:03 1.16 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: parse.c,v 1.13.2.1 2014/01/30 08:13:09 misho Exp $ +* $Id: parse.c,v 1.16 2017/06/28 15:13:03 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2014 +Copyright 2004 - 2017 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -47,21 +47,6 @@ SUCH DAMAGE. /* -static inline void -_invertQueue(cfg_root_t * __restrict cfg) -{ - struct tagCfg *item, *next, *prev = NULL; - - SLIST_FOREACH_SAFE(item, cfg, cfg_next, next) { - item->cfg_next.sle_next = prev; - prev = item; - } - cfg->slh_first = prev; -} -*/ - - -/* * cfgReadConfig() - Read file and add new item at config root * * @f = File resource @@ -197,7 +182,6 @@ int cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, int whitespace) { struct tagCfg *av; - time_t tim; char line[BUFSIZ] = { 0 }, szSection[STRSIZ] = { [0 ... STRSIZ - 1] = 0 }; if (!f || !cfg) { @@ -206,8 +190,7 @@ cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i } CFG_RC_LOCK(cfg); -// _invertQueue(cfg); - TAILQ_FOREACH(av, cfg, cfg_next) { + RB_FOREACH(av, tagRC, cfg) { /* empty lines or comment */ if (AIT_ISEMPTY(&av->cfg_attr)) { if (AIT_ISEMPTY(&av->cfg_val)) @@ -218,19 +201,17 @@ cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i /* section [] */ if (!AIT_ISEMPTY(&av->cfg_sec) && AIT_ADDR(&av->cfg_sec) && - strcmp(AIT_GET_STR(&av->cfg_sec), szSection)) { + strcmp(AIT_GET_STRZ(&av->cfg_sec), szSection)) { strlcpy(szSection, AIT_GET_STR(&av->cfg_sec), sizeof szSection); - if (!cfg_Write(f, "[%s]\n", AIT_GET_STR(&av->cfg_sec))) { + if (!cfg_Write(f, "\n[%s]\n", AIT_GET_STR(&av->cfg_sec))) { LOGERR; -// _invertQueue(cfg); CFG_RC_UNLOCK(cfg); return -1; } } else if (AIT_ISEMPTY(&av->cfg_sec) && *szSection) { memset(szSection, 0, sizeof szSection); - if (!cfg_Write(f, "[]\n")) { + if (!cfg_Write(f, "\n[]\n")) { LOGERR; -// _invertQueue(cfg); CFG_RC_UNLOCK(cfg); return -1; } @@ -251,21 +232,12 @@ skip_sec: /* write */ if (!cfg_Write(f, "%s\n", line)) { LOGERR; -// _invertQueue(cfg); CFG_RC_UNLOCK(cfg); return -1; } } -// _invertQueue(cfg); CFG_RC_UNLOCK(cfg); - if (whitespace) { - time(&tim); - memset(line, 0, sizeof line); - strftime(line, sizeof line, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim)); - cfg_Write(f, "\n## Config was saved at :: %s ##\n", line); - } - return 0; } @@ -469,12 +441,10 @@ cfgWriteLines(FILE *f, const char *delim, const char * AIT_INIT_VAL2(v, string); TAILQ_FOREACH(av, cfg, cfg_next) { - if (AIT_ISEMPTY(&av->cfg_attr)) - continue; if (section) { if (!AIT_ISEMPTY(&av->cfg_sec) && *section) continue; - if (strcmp(section, AIT_GET_STR(&av->cfg_sec))) + if (strcmp(section, AIT_GET_STRZ(&av->cfg_sec))) continue; } @@ -482,8 +452,10 @@ cfgWriteLines(FILE *f, const char *delim, const char * AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_sec)); AIT_SET_STRCAT(v, SEC_LINES_DELIM); } - AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_attr)); - AIT_SET_STRCAT(v, delim); + if (!AIT_ISEMPTY(&av->cfg_attr)) { + AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_attr)); + AIT_SET_STRCAT(v, delim); + } if (!AIT_ISEMPTY(&av->cfg_val)) AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_val)); AIT_SET_STRCAT(v, eol);