--- libaitcfg/inc/aitcfg.h 2021/11/26 01:10:34 1.17.2.2 +++ libaitcfg/inc/aitcfg.h 2026/08/04 18:59:27 1.23 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitcfg.h,v 1.17.2.2 2021/11/26 01:10:34 misho Exp $ +* $Id: aitcfg.h,v 1.23 2026/08/04 18:59:27 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 - 2021 +Copyright 2004 - 2026 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -55,6 +55,7 @@ struct tagCfg { ait_val_t cfg_sec; ait_val_t cfg_attr; ait_val_t cfg_val; + int cfg_quoted; TAILQ_ENTRY(tagCfg) cfg_next; RB_ENTRY(tagCfg) cfg_node; @@ -73,6 +74,9 @@ typedef struct tagRC { #define CFG_ATTRIBUTE(x) (assert((x)), AIT_GET_LIKE(&((struct tagCfg*) (x))->cfg_attr, const char*)) #define CFG_VALUE(x) (assert((x)), AIT_GET_LIKE(&((struct tagCfg*) (x))->cfg_val, const char*)) +#ifdef __cplusplus +extern "C" { +#endif // cfg_GetErrno() Get error code of last operation int cfg_GetErrno(); @@ -100,6 +104,22 @@ cfg_root_t *cfgInitConfig(); */ void cfgEndConfig(cfg_root_t **pcfg); /* + * cfgInitConfigExt() - Init existed config root + * + * @cfg = Config root + * return: -1 error or 0 inited config root + */ +int cfgInitConfigExt(cfg_root_t * __restrict cfg); +/* + * cfgLoadConfigExt() - Load config from file with recursion level of includes + * + * @cfgName = Config filename + * @cfg = Config root + * @lvl = Level of include recursion + * return: -1 error or 0 ok + */ +int cfgLoadConfigExt(const char *cfgName, cfg_root_t * __restrict cfg, int lvl); +/* * cfgLoadConfig() - Load config from file * * @cfgName = Config filename @@ -156,13 +176,15 @@ int cfgReadLines(FILE *f, const char *delim, const cha ait_val_t *cfgWriteLines(FILE *f, const char *delim, const char *eol, const char *section, cfg_root_t * __restrict cfg); /* - * cfgReadConfig() - Read file and add new item at config root + * cfg_ReadConfig() - Read file and add new item at config root * * @f = File resource * @cfg = Config root + * @lvl = Level of include recursion * return: -1 error or 0 ok */ -int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg); +int cfg_ReadConfig(FILE *f, cfg_root_t * __restrict cfg, int lvl); +#define cfgReadConfig(f, c) cfg_ReadConfig((f), (c), 1) /* * cfgWriteConfig() - Write config from memory * @@ -206,6 +228,14 @@ int cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_ro */ void cfg_dumpCfg(cfg_root_t * __restrict cfg); /* + * cfg_delSection() - Delete entire section + * + * @cfg = Config root + * @csSec = Config section //[{csSec}] + * return: -1 error, 0 nothing deleted or >0 deleted attributes + */ +int cfg_delSection(cfg_root_t * __restrict cfg, const char *csSec); +/* * cfg_getSection() - Get entire section attributes into array * * @cfg = Config root @@ -309,5 +339,8 @@ int cfg_unsetAttribute(cfg_root_t * __restrict cfg, co int cfg_loadAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr, ait_val_t * __restrict val, const char *csDefValue); +#ifdef __cplusplus +} +#endif #endif