--- libaitcfg/src/parse.c 2009/09/23 14:20:53 1.2.2.3 +++ libaitcfg/src/parse.c 2010/03/22 18:29:22 1.5.2.1 @@ -3,12 +3,11 @@ * by Michael Pounov * * $Author: misho $ -* $Id: parse.c,v 1.2.2.3 2009/09/23 14:20:53 misho Exp $ +* $Id: parse.c,v 1.5.2.1 2010/03/22 18:29:22 misho Exp $ * *************************************************************************/ #include "global.h" #include "aitcfg.h" -#include "tools.h" // cfgDbg() Debug/Log operation @@ -187,6 +186,7 @@ int ReadConfig(FILE *f, sl_config * __restrict cfg) szLine[pos] = 0; rtrim(psAttr); ltrim(psVal); + unquot(psVal); #ifdef __DEBUG cfgDbg(stdout, "DEBUG:: Attr(%p) ->%s size=%d Value(%p) ->%s size=%d\n", psAttr, psAttr, strlen((char*) psAttr), psVal, psVal, strlen((char*) psVal)); @@ -255,6 +255,58 @@ int ConcatConfig(sl_config * __restrict cfg, sl_config for (item = cfg->slh_first; item->sle_next; item = item->sle_next); item->sle_next = add_cfg->slh_first; + add_cfg->slh_first = NULL; + return ret; } +/* + * MergeConfig() Marge two list in one cfg and destroy add_cfg + * @cfg = Head list element of main list + * @add_cfg = Head list element of merged list (destroy after all!) + * return: 0 ok; -1 error:: can`t merge lists +*/ +int MergeConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg) +{ + struct tagPair *item, *merge, *add_next, *next = NULL; + int flg; + + if (!cfg || !add_cfg) + return -1; + + item = add_cfg->slh_first; + while (item) { + add_next = item->sle_next; + + for (flg = 0, merge = cfg->slh_first, next = merge->sle_next; next; + merge = merge->sle_next, next = merge->sle_next) { + if (!merge->psSection && !item->psSection) { + flg = 1; + merge->sle_next = item; + item->sle_next = next; + break; + } + if (merge->psSection && item->psSection && + !strcmp((char*) merge->psSection, (char*) item->psSection)) { + flg = 1; + merge->sle_next = item; + item->sle_next = next; + break; + } + } + + if (!flg) { + if (!merge->sle_next) { + merge->sle_next = item; + item->sle_next = NULL; + } else + return -1; + } + + item = add_next; + } + + add_cfg->slh_first = NULL; + + return 0; +}