--- libaitcfg/src/parse.c 2014/01/30 08:13:09 1.13.2.1 +++ libaitcfg/src/parse.c 2014/01/30 08:27:43 1.13.2.3 @@ -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.13.2.3 2014/01/30 08:27:43 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -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 @@ -205,9 +190,15 @@ cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i return -1; } + 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, "## Config auto-generated at :: %s ##\n", line); + } + 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 +209,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,12 +240,10 @@ 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) { @@ -474,7 +461,7 @@ cfgWriteLines(FILE *f, const char *delim, const char * 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; }