Diff for /libaitcfg/src/queue.c between versions 1.14.4.2 and 1.17.2.1

version 1.14.4.2, 2014/03/19 17:00:51 version 1.17.2.1, 2019/12/05 14:32:36
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 - 2019
         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 72  _selectAttribute(cfg_root_t * __restrict cfg, const ch Line 72  _selectAttribute(cfg_root_t * __restrict cfg, const ch
                 do {                  do {
                         if (!strcmp(AIT_GET_STR(&c->cfg_attr), csAttr))                          if (!strcmp(AIT_GET_STR(&c->cfg_attr), csAttr))
                                 return c;       /* FOUND! */                                  return c;       /* FOUND! */
                } while (RB_NEXT(tagRC, cfg, c) && !cfg_tree_cmp(c, &fav));                } while ((c = RB_NEXT(tagRC, cfg, c)) && c && !cfg_tree_cmp(c, &fav));
                 return NULL;    /* not found */                  return NULL;    /* not found */
         }          }
 }  }
Line 80  _selectAttribute(cfg_root_t * __restrict cfg, const ch Line 80  _selectAttribute(cfg_root_t * __restrict cfg, const ch
 /* --------------------------------------------------------------- */  /* --------------------------------------------------------------- */
   
 /*  /*
    * cfg_dumpCfg() - dump config data
    *
    * @cfg = Config root
    * return: none
    */
   void
   cfg_dumpCfg(cfg_root_t * __restrict cfg)
   {
           struct tagCfg *r, *c, *ctmp, *q, *qtmp;
           int syn;
   
           r = RB_ROOT(cfg);
           printf("ROOT:: KEY=%.8x [%s] %s=%s\n", ((AIT_KEY(&r->cfg_sec) << 15) | AIT_KEY(&r->cfg_attr)), 
                           AIT_ADDR(&r->cfg_sec), AIT_ADDR(&r->cfg_attr), AIT_ADDR(&r->cfg_val));
   
           RB_FOREACH_SAFE(c, tagRC, cfg, ctmp) {
                   syn ^= syn;
                   TAILQ_FOREACH_SAFE(q, cfg, cfg_next, qtmp) {
                           if (c == q) {
                                   syn = 42;
                                   break;
                           }
                   }
   
                   printf("%s KEY=%.8x [%s] %s=%s sync=%d\n", c == r ? "*" : "", 
                                   ((AIT_KEY(&c->cfg_sec) << 15) | AIT_KEY(&c->cfg_attr)), 
                                   AIT_ADDR(&c->cfg_sec), AIT_ADDR(&c->cfg_attr), AIT_ADDR(&c->cfg_val), syn);
           }
   }
   
   /*
  * cfg_getSection() - Get entire section attributes into array   * cfg_getSection() - Get entire section attributes into array
  *   *
  * @cfg = Config root   * @cfg = Config root
Line 97  cfg_getSection(cfg_root_t * __restrict cfg, const char Line 128  cfg_getSection(cfg_root_t * __restrict cfg, const char
                 return NULL;                  return NULL;
         } else          } else
                 memset(&fav, 0, sizeof fav);                  memset(&fav, 0, sizeof fav);
           if (csSec && !*csSec)
                   csSec = NULL;
   
         if (csSec && *csSec)          if (csSec && *csSec)
                 AIT_KEY(&fav.cfg_sec) = crcFletcher16((u_short*) csSec,                   AIT_KEY(&fav.cfg_sec) = crcFletcher16((u_short*) csSec, 
                                 E_ALIGN(strlen(csSec), 2) / 2);                                  E_ALIGN(strlen(csSec), 2) / 2);
   
        av = RB_NFIND(tagRC, cfg, &fav);        arr = array_Init(0);
        if (!av) 
                return NULL; 
        if (strcmp(AIT_GET_STR(&av->cfg_sec), csSec)) 
                return NULL; 
 
        arr = array_Init(1); 
         if (!arr) {          if (!arr) {
                 cfg_SetErr(elwix_GetErrno(), "%s", elwix_GetError());                  cfg_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return NULL;                  return NULL;
        } else        }
                array_Push(arr, av, 0); 
   
        while (RB_NEXT(tagRC, cfg, av) && !strcmp(AIT_GET_STR(&av->cfg_sec), csSec))        TAILQ_FOREACH(av, cfg, cfg_next)
                array_Push(arr, av, 0);                if (AIT_KEY(&av->cfg_sec) == AIT_KEY(&fav.cfg_sec)) {
                         if (!csSec) {
                                 if (AIT_ISEMPTY(&av->cfg_sec))
                                         array_Push(arr, av, 0);
                         } else {
                                 if (!AIT_ISEMPTY(&av->cfg_sec) && 
                                                 !strcmp(AIT_GET_STR(&av->cfg_sec), csSec))
                                         array_Push(arr, av, 0);
                         }
                 }
   
           if (!array_Size(arr))
                   array_Destroy(&arr);
   
         return arr;          return arr;
 }  }
   
Line 275  cfg_getAttribute(cfg_root_t * __restrict cfg, const ch Line 313  cfg_getAttribute(cfg_root_t * __restrict cfg, const ch
                 return NULL;                  return NULL;
   
         return AIT_GET_STR(&av->cfg_val);          return AIT_GET_STR(&av->cfg_val);
   }
   
   /*
    * cfg_getAttributeLong() - Get item as long 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 as *any* attribute
    * return: value
    */
   long
   cfg_getAttributeLong(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)
   {
           const char *str = NULL;
   
           str = cfg_getAttribute(cfg, csSec, csAttr);
           return strtol(str ? str : "", NULL, 0);
   }
   
   /*
    * cfg_getAttributeLLong() - Get item as long long 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 as *any* attribute
    * return: value
    */
   long long
   cfg_getAttributeLLong(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)
   {
           const char *str = NULL;
   
           str = cfg_getAttribute(cfg, csSec, csAttr);
           return strtoll(str ? str : "", NULL, 0);
   }
   
   /*
    * cfg_getAttributeDouble() - Get item as double 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 as *any* attribute
    * return: value
    */
   double
   cfg_getAttributeDouble(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)
   {
           const char *str = NULL;
   
           str = cfg_getAttribute(cfg, csSec, csAttr);
           return strtod(str ? str : "", NULL);
   }
   
   /*
    * cfg_getAttributeLDouble() - Get item as long double 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 as *any* attribute
    * return: value
    */
   long double
   cfg_getAttributeLDouble(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)
   {
           const char *str = NULL;
   
           str = cfg_getAttribute(cfg, csSec, csAttr);
           return strtold(str ? str : "", NULL);
 }  }
   
 /*  /*

Removed from v.1.14.4.2  
changed lines
  Added in v.1.17.2.1


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