| 
version 1.3, 2009/10/19 15:00:10
 | 
version 1.6.4.1, 2012/04/02 14:39:02
 | 
| 
 Line 5
 | 
 Line 5
 | 
 |  * $Author$ | 
  * $Author$ | 
 |  * $Id$ | 
  * $Id$ | 
 |  * | 
  * | 
| *************************************************************************/ | ************************************************************************** | 
|   | The ELWIX and AITNET software is distributed under the following | 
|   | terms: | 
|   |  | 
|   | All of the documentation and software included in the ELWIX and AITNET | 
|   | Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> | 
|   |  | 
|   | Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 | 
|   |         by Michael Pounov <misho@elwix.org>.  All rights reserved. | 
|   |  | 
|   | Redistribution and use in source and binary forms, with or without | 
|   | modification, are permitted provided that the following conditions | 
|   | are met: | 
|   | 1. Redistributions of source code must retain the above copyright | 
|   |    notice, this list of conditions and the following disclaimer. | 
|   | 2. Redistributions in binary form must reproduce the above copyright | 
|   |    notice, this list of conditions and the following disclaimer in the | 
|   |    documentation and/or other materials provided with the distribution. | 
|   | 3. All advertising materials mentioning features or use of this software | 
|   |    must display the following acknowledgement: | 
|   | This product includes software developed by Michael Pounov <misho@elwix.org> | 
|   | ELWIX - Embedded LightWeight unIX and its contributors. | 
|   | 4. Neither the name of AITNET nor the names of its contributors | 
|   |    may be used to endorse or promote products derived from this software | 
|   |    without specific prior written permission. | 
|   |  | 
|   | THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND | 
|   | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
|   | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
|   | ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | 
|   | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
|   | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
|   | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
|   | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
|   | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
|   | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
|   | SUCH DAMAGE. | 
|   | */ | 
 |  #ifndef __AITCFG_H | 
  #ifndef __AITCFG_H | 
 |  #define __AITCFG_H | 
  #define __AITCFG_H | 
 |   | 
   | 
 |   | 
   | 
| struct tagPair { | #include <aitio.h> | 
|         unsigned int    uLine; | #include <atree.h> | 
|         unsigned char   *psSection; |   | 
|         unsigned char   *psAttribute; |   | 
|         unsigned char   *psValue; |   | 
|         struct tagPair *sle_next; |   | 
| }; |   | 
 |   | 
   | 
| struct tagHead { |  | 
|         struct tagPair *slh_first; | struct tagCfg { | 
|   |         ait_val_t               cfg_sec; | 
|   |         ait_val_t               cfg_attr; | 
|   |         ait_val_t               cfg_val; | 
|   |  | 
|   |         SLIST_ENTRY(tagCfg)     cfg_next; | 
|   |         RB_ENTRY(tagCfg)        cfg_node; | 
 |  }; | 
  }; | 
| typedef struct tagHead sl_config; | typedef struct tagRC { | 
|   | #ifdef HAVE_LIBPTHREAD | 
|   |         pthread_mutex_t         rc_mtx; | 
|   | #endif | 
|   |         struct tagCfg           *slh_first; | 
|   |         struct tagCfg           *rbh_root; | 
|   | } cfg_root_t; | 
|   | #ifdef HAVE_LIBPTHREAD | 
|   | #define CFG_RC_LOCK(x)          pthread_mutex_lock(&(x)->rc_mtx) | 
|   | #define CFG_RC_UNLOCK(x)        pthread_mutex_unlock(&(x)->rc_mtx) | 
|   | #else | 
|   | #define CFG_RC_LOCK(x) | 
|   | #define CFG_RC_UNLOCK(x) | 
|   | #endif | 
 |   | 
   | 
 |   | 
   | 
 |   | 
  // cfg_GetErrno() Get error code of last operation | 
 |   | 
  inline int cfg_GetErrno(); | 
 |   | 
  // cfg_GetError() Get error text of last operation | 
 |   | 
  inline const char *cfg_GetError(); | 
 |   | 
   | 
 |   | 
   | 
 |  /* | 
  /* | 
|  * InitConfig() Head initializing function for config |  * Macros for config library. | 
|  * @cfg = New head element for init |   | 
|  * return: 0 ok; -1 error:: new head element is null |   | 
 |  */ | 
  */ | 
| inline int InitConfig(sl_config * __restrict cfg); | #define CFG_ISEMPTY(x)          RB_EMPTY((x)) | 
|   |  | 
|   |  | 
 |  /* | 
  /* | 
 |   | 
   * cfgLoadConfig() - Load config from file | 
 |   | 
   * | 
 |   | 
   * @cfgName = Config filename | 
 |   | 
   * @cfg = Config root | 
 |   | 
   * return: -1 error or 0 ok | 
 |   | 
   */ | 
 |   | 
  int cfgLoadConfig(const char *cfgName, cfg_root_t * __restrict cfg); | 
 |   | 
  /* | 
 |   | 
   * cfgUnloadConfig() - Unload config from memory and free resources | 
 |   | 
   * | 
 |   | 
   * @cfg = Config root | 
 |   | 
   * return: none | 
 |   | 
   */ | 
 |   | 
  void cfgUnloadConfig(cfg_root_t * __restrict cfg); | 
 |   | 
   | 
 |   | 
  /* | 
 |   | 
   * cfgReadConfig() - Read file and add new item at config root | 
 |   | 
   * | 
 |   | 
   * @f = File resource | 
 |   | 
   * @cfg = Config root | 
 |   | 
   * return: -1 error or 0 ok | 
 |   | 
   */ | 
 |   | 
  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg); | 
 |   | 
   | 
 |   | 
  #if 0 | 
 |   | 
  /* | 
 |   * cfg_CreateConfig() Create config file from memory without whitespaces! | 
   * cfg_CreateConfig() Create config file from memory without whitespaces! | 
 |   * @csConfigName = New config filename | 
   * @csConfigName = New config filename | 
 |   * @cfg = Head list element | 
   * @cfg = Head list element | 
| 
 Line 44  int cfg_CreateConfig(const char *csConfigName, sl_conf
 | 
 Line 127  int cfg_CreateConfig(const char *csConfigName, sl_conf
 | 
 |   * return: 0 ok; -1 error:: can`t save new config | 
   * return: 0 ok; -1 error:: can`t save new config | 
 |  */ | 
  */ | 
 |  int CreateConfig(const char *csConfigName, sl_config * __restrict cfg); | 
  int CreateConfig(const char *csConfigName, sl_config * __restrict cfg); | 
 |  /* | 
   | 
 |   * LoadConfig() Load config from file | 
   | 
 |   * @csConfigName = Filename of config | 
   | 
 |   * @cfg = Head list element | 
   | 
 |   * return: 0 ok; -1 error:: can`t load config | 
   | 
 |  */ | 
   | 
 |  int LoadConfig(const char *csConfigName, sl_config * __restrict cfg); | 
   | 
 |  /* | 
   | 
 |   * UnloadConfig() Unload config from memory and free resources | 
   | 
 |   * @cfg = Head list element | 
   | 
 |  */ | 
   | 
 |  void UnloadConfig(sl_config * __restrict cfg); | 
   | 
 |   | 
   | 
 |   | 
   | 
 |  // cfg_GetErrno() Get error code of last operation | 
   | 
 |  inline int cfg_GetErrno(); | 
   | 
 |  // cfg_GetError() Get error text of last operation | 
   | 
 |  inline const char *cfg_GetError(); | 
   | 
 |   | 
   | 
 |   | 
   | 
 |  /* | 
  /* | 
 |   * ReadConfig() Read from file and add new item to config list | 
   | 
 |   * @f = file resource | 
   | 
 |   * @cfg = Head list element | 
   | 
 |   * return: 0 ok; -1 error:: can`t allocate memory | 
   | 
 |  */ | 
   | 
 |  int ReadConfig(FILE *f, sl_config * __restrict cfg); | 
   | 
 |  /* | 
   | 
 |   * WriteConfig() Write to file from items in config list | 
   * WriteConfig() Write to file from items in config list | 
 |   * @f = file resource | 
   * @f = file resource | 
 |   * @cfg = Head list element | 
   * @cfg = Head list element | 
| 
 Line 102  int ConcatConfig(sl_config * __restrict cfg, sl_config
 | 
 Line 160  int ConcatConfig(sl_config * __restrict cfg, sl_config
 | 
 |   * return: 0 ok; -1 error:: can`t merge lists | 
   * return: 0 ok; -1 error:: can`t merge lists | 
 |  */ | 
  */ | 
 |  int MergeConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg); | 
  int MergeConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg); | 
 |   | 
  #endif | 
 |   | 
   | 
 |   | 
   | 
 |  /* | 
  /* | 
|  * cfg_FindAttribute() Find attribute position in config list |  * cfg_findAttribute() - Find attribute position in config file | 
|  * @cfg = Head list element |  * | 
|   |  * @cfg = Config root | 
 |   * @csSec = Config section //[{csSec}] | 
   * @csSec = Config section //[{csSec}] | 
 |   * @csAttr = Config attribute //{csAttr} = ... | 
   * @csAttr = Config attribute //{csAttr} = ... | 
 |   * return: 0 not found item; -1 error: null parameters; >0 position in list | 
   * return: 0 not found item; -1 error: null parameters; >0 position in list | 
| */ |  */ | 
| inline int cfg_FindAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr); | inline int cfg_findAttribute(cfg_root_t * __restrict cfg,  | 
|   |                 const char *csSec, const char *csAttr); | 
 |  /* | 
  /* | 
 |   | 
   * cfg_getAttribute() - Get item from config and return value from it | 
 |   | 
   * | 
 |   | 
   * @cfg = Config root | 
 |   | 
   * @csSec = Config section //[{csSec}], if NULL unset in *default* section | 
 |   | 
   * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute | 
 |   | 
   * return: NULL item not found or null parameters; !=NULL value const string | 
 |   | 
   */ | 
 |   | 
  inline const char *cfg_getAttribute(cfg_root_t * __restrict cfg,  | 
 |   | 
                  const char *csSec, const char *csAttr); | 
 |   | 
   | 
 |   | 
  #if 0 | 
 |   | 
  /* | 
 |   * cfg_SetAttribute() Set item in config list or add new item if not exists | 
   * cfg_SetAttribute() Set item in config list or add new item if not exists | 
 |   * @cfg = Head list element | 
   * @cfg = Head list element | 
 |   * @csSec = Config section //[{csSec}], if NULL set in *default* section | 
   * @csSec = Config section //[{csSec}], if NULL set in *default* section | 
| 
 Line 150  inline const u_char *cfg_GetAttribute(sl_config * __re
 | 
 Line 222  inline const u_char *cfg_GetAttribute(sl_config * __re
 | 
 |  */ | 
  */ | 
 |  int cfg_LoadAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr,  | 
  int cfg_LoadAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr,  | 
 |                  u_char * __restrict psVal, int ValLen, const char *csDefValue); | 
                  u_char * __restrict psVal, int ValLen, const char *csDefValue); | 
 |   | 
  #endif | 
 |   | 
   | 
 |   | 
   | 
 |  #endif | 
  #endif |