Diff for /libaitcfg/src/aitcfg.c between versions 1.10 and 1.16.6.4

version 1.10, 2014/01/29 23:48:34 version 1.16.6.4, 2025/08/19 11:40:13
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2014Copyright 2004 - 2025
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 71  cfg_tree_cmp(struct tagCfg *a, struct tagCfg *b) Line 71  cfg_tree_cmp(struct tagCfg *a, struct tagCfg *b)
   
         assert(a && b);          assert(a && b);
   
        ret = ((AIT_KEY(&a->cfg_sec) << 16) | AIT_KEY(&a->cfg_attr)) -         ret = ((AIT_KEY(&a->cfg_sec) << 15) | AIT_KEY(&a->cfg_attr)) - 
                ((AIT_KEY(&b->cfg_sec) << 16) | AIT_KEY(&b->cfg_attr));                ((AIT_KEY(&b->cfg_sec) << 15) | AIT_KEY(&b->cfg_attr));
   
         if (ret < 0)          if (ret < 0)
                 return -1;                  return -1;
Line 118  cfg_SetErr(int eno, char *estr, ...) Line 118  cfg_SetErr(int eno, char *estr, ...)
 /*  /*
  * cfgInitConfig() - Init config root   * cfgInitConfig() - Init config root
  *   *
    * return: NULL error or !=NULL allocated config root
    */
   cfg_root_t *
   cfgInitConfig()
   {
           cfg_root_t *cfg = NULL;
   
           cfg = e_malloc(sizeof(cfg_root_t));
           if (!cfg) {
                   cfg_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                   return NULL;
           } else
                   memset(cfg, 0, sizeof(cfg_root_t));
   
           pthread_mutex_init(&cfg->rc_mtx, NULL);
   
           TAILQ_INIT(cfg);
           RB_INIT(cfg);
           return cfg;
   }
   
   /*
    * cfgEndConfig() - Free resources & config root
    *
    * @pcfg = Config root
    * return: none
    */
   void
   cfgEndConfig(cfg_root_t **pcfg)
   {
           if (pcfg && *pcfg) {
                   cfgClearConfig(*pcfg);
                   pthread_mutex_destroy(&(*pcfg)->rc_mtx);
                   e_free(*pcfg);
                   *pcfg = NULL;
           }
   }
   
   /*
    * cfgInitConfigExt() - Init existed config root
    *
  * @cfg = Config root   * @cfg = Config root
 * return: -1 error or 0 ok * return: -1 error or 0 inited config root
  */   */
 int  int
cfgInitConfig(cfg_root_t * __restrict cfg)cfgInitConfigExt(cfg_root_t * __restrict cfg)
 {  {
        if (!cfg)        if (!cfg) {
                 cfg_SetErr(EINVAL, "Invalid parameter");
                 return -1;                  return -1;
           }
   
           memset(cfg, 0, sizeof(cfg_root_t));
   
         pthread_mutex_init(&cfg->rc_mtx, NULL);          pthread_mutex_init(&cfg->rc_mtx, NULL);
   
        SLIST_INIT(cfg);        TAILQ_INIT(cfg);
         RB_INIT(cfg);          RB_INIT(cfg);
         return 0;          return 0;
 }  }
Line 147  cfgLoadConfig(const char *cfgName, cfg_root_t * __rest Line 192  cfgLoadConfig(const char *cfgName, cfg_root_t * __rest
         FILE *f;          FILE *f;
         int ret;          int ret;
   
        if (!cfgName || !cfg) {        if (!cfgName || cfgInitConfigExt(cfg)) {
                 cfg_SetErr(EINVAL, "Invalid parameter(s)");                  cfg_SetErr(EINVAL, "Invalid parameter(s)");
                 return -1;                  return -1;
        } else        }
                cfgInitConfig(cfg); 
   
         f = fopen(cfgName, "r");          f = fopen(cfgName, "r");
         if (!f) {          if (!f) {
Line 180  cfgClearConfig(cfg_root_t * __restrict cfg) Line 224  cfgClearConfig(cfg_root_t * __restrict cfg)
                 return;                  return;
   
         CFG_RC_LOCK(cfg);          CFG_RC_LOCK(cfg);
        while ((av = SLIST_FIRST(cfg))) {        while ((av = TAILQ_FIRST(cfg))) {
                SLIST_REMOVE_HEAD(cfg, cfg_next);                TAILQ_REMOVE(cfg, av, cfg_next);
   
                 AIT_FREE_VAL(&av->cfg_val);                  AIT_FREE_VAL(&av->cfg_val);
                 AIT_FREE_VAL(&av->cfg_attr);                  AIT_FREE_VAL(&av->cfg_attr);
Line 206  cfgUnloadConfig(cfg_root_t * __restrict cfg) Line 250  cfgUnloadConfig(cfg_root_t * __restrict cfg)
   
         cfgClearConfig(cfg);          cfgClearConfig(cfg);
         pthread_mutex_destroy(&cfg->rc_mtx);          pthread_mutex_destroy(&cfg->rc_mtx);
           memset(&cfg->rc_mtx, 0, sizeof cfg->rc_mtx);
 }  }
   
 /*  /*
Line 231  cfgCreateConfig(const char *csConfigName, cfg_root_t * Line 276  cfgCreateConfig(const char *csConfigName, cfg_root_t *
                 return -1;                  return -1;
         }          }
                   
        ret = cfgWriteConfig(f, cfg, whitespace);        ret = cfgWriteConfigRaw(f, cfg, whitespace);
   
         fclose(f);          fclose(f);
         return ret;          return ret;
Line 240  cfgCreateConfig(const char *csConfigName, cfg_root_t * Line 285  cfgCreateConfig(const char *csConfigName, cfg_root_t *
 /*  /*
  * cfgInitPasswd() - Init password root   * cfgInitPasswd() - Init password root
  *   *
 * @pwd = Password root * return: NULL error or !=NULL allocated password root
 * return: -1 error or 0 ok 
  */   */
intpwd_root_t *
cfgInitPasswd(pwd_root_t * __restrict pwd)cfgInitPasswd()
 {  {
        if (!pwd)        pwd_root_t *pwd = NULL;
                return -1; 
   
           pwd = e_malloc(sizeof(pwd_root_t));
           if (!pwd) {
                   cfg_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                   return NULL;
           } else
                   memset(pwd, 0, sizeof(pwd_root_t));
   
         pthread_mutex_init(&pwd->pwd_mtx, NULL);          pthread_mutex_init(&pwd->pwd_mtx, NULL);
   
         SLIST_INIT(pwd);          SLIST_INIT(pwd);
Line 257  cfgInitPasswd(pwd_root_t * __restrict pwd) Line 307  cfgInitPasswd(pwd_root_t * __restrict pwd)
 }  }
   
 /*  /*
    * cfgEndPasswd() - Free resources & password root
    *
    * @ppwd = Password root
    * return: none
    */
   void
   cfgEndPasswd(pwd_root_t **ppwd)
   {
           if (ppwd && *ppwd) {
                   cfgClearPasswd(*ppwd);
                   pthread_mutex_destroy(&(*ppwd)->pwd_mtx);
                   e_free(*ppwd);
                   *ppwd = NULL;
           }
   }
   
   /*
  * cfgLoadPasswd() - Load passwords from file   * cfgLoadPasswd() - Load passwords from file
  *   *
  * @pwdName = Passwords filename   * @pwdName = Passwords filename
Line 272  cfgLoadPasswd(const char *pwdName, pwd_root_t * __rest Line 339  cfgLoadPasswd(const char *pwdName, pwd_root_t * __rest
         if (!pwdName || !pwd) {          if (!pwdName || !pwd) {
                 cfg_SetErr(EINVAL, "Invalid parameter(s)");                  cfg_SetErr(EINVAL, "Invalid parameter(s)");
                 return -1;                  return -1;
        } else        } else {
                cfgInitPasswd(pwd);                memset(pwd, 0, sizeof(pwd_root_t));
 
                 pthread_mutex_init(&pwd->pwd_mtx, NULL);
 
                 SLIST_INIT(pwd);
                 RB_INIT(pwd);
         }
   
         f = fopen(pwdName, "r");          f = fopen(pwdName, "r");
         if (!f) {          if (!f) {

Removed from v.1.10  
changed lines
  Added in v.1.16.6.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>