Diff for /libaitcfg/src/queue.c between versions 1.18 and 1.19

version 1.18, 2019/12/05 14:33:35 version 1.19, 2021/11/26 01:15:03
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 - 2019Copyright 2004 - 2021
         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 49  SUCH DAMAGE. Line 49  SUCH DAMAGE.
 static inline struct tagCfg *  static inline struct tagCfg *
 _selectAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)  _selectAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)
 {  {
        struct tagCfg fav, *c;        struct tagCfg fav, *c, *n;
   
         if (!cfg)          if (!cfg)
                 return NULL;                  return NULL;
Line 63  _selectAttribute(cfg_root_t * __restrict cfg, const ch Line 63  _selectAttribute(cfg_root_t * __restrict cfg, const ch
                 AIT_KEY(&fav.cfg_attr) = crcFletcher16((u_short*) csAttr,                   AIT_KEY(&fav.cfg_attr) = crcFletcher16((u_short*) csAttr, 
                                 E_ALIGN(strlen(csAttr), 2) / 2);                                  E_ALIGN(strlen(csAttr), 2) / 2);
   
        if (!csAttr)        if (!csAttr) {
                return RB_NFIND(tagRC, cfg, &fav);                c = RB_NFIND(tagRC, cfg, &fav);
        else {                if (!c)
                         return NULL;    /* not found */
                 if (csSec && !AIT_ISEMPTY(&c->cfg_sec) && 
                                 strcmp(csSec, AIT_GET_STR(&c->cfg_sec)))
                         TAILQ_FOREACH_SAFE(c, cfg, cfg_next, n) {
                                 if (!AIT_ISEMPTY(&c->cfg_sec) && 
                                                 !strcmp(csSec, AIT_GET_STR(&c->cfg_sec)))
                                         break;
                         }
                 return c;
         } else {
                 c = RB_FIND(tagRC, cfg, &fav);                  c = RB_FIND(tagRC, cfg, &fav);
                 if (!c)                  if (!c)
                         return NULL;    /* not found */                          return NULL;    /* not found */
                   /* if cannot find right section */
                   if (csSec && !AIT_ISEMPTY(&c->cfg_sec) && 
                                   strcmp(csSec, AIT_GET_STR(&c->cfg_sec))) {
                           TAILQ_FOREACH_SAFE(c, cfg, cfg_next, n) {
                                   if (!AIT_ISEMPTY(&c->cfg_sec) && csAttr && 
                                                   !strcmp(csSec, AIT_GET_STR(&c->cfg_sec)) && 
                                                   !strcmp(csAttr, AIT_GET_STR(&c->cfg_attr)))
                                           return c;       /* FOUND! */
                           }
                           return NULL;    /* not found */
                   }
                 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 ((c = RB_NEXT(tagRC, cfg, c)) && c && !cfg_tree_cmp(c, &fav));                  } while ((c = RB_NEXT(tagRC, cfg, c)) && c && !cfg_tree_cmp(c, &fav));
                   /* if cannot find right attribute */
                   TAILQ_FOREACH_SAFE(c, cfg, cfg_next, n) {
                           if ((!csSec && AIT_ISEMPTY(&c->cfg_sec)) || 
                                           (csSec && !AIT_ISEMPTY(&c->cfg_sec) && 
                                            !strcmp(csSec, AIT_GET_STR(&c->cfg_sec))))
                                   if (!AIT_ISEMPTY(&c->cfg_attr) && csAttr && 
                                                   !strcmp(csAttr, AIT_GET_STR(&c->cfg_attr)))
                                           return c;       /* FOUND! */
                   }
                 return NULL;    /* not found */                  return NULL;    /* not found */
         }          }
 }  }
Line 164  cfg_getSection(cfg_root_t * __restrict cfg, const char Line 194  cfg_getSection(cfg_root_t * __restrict cfg, const char
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}]   * @csSec = Config section //[{csSec}]
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: 0 not found item, -1 error or >0 position in list   * return: 0 not found item, -1 error or >0 position in list
  */   */
 int  int
 cfg_findAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)  cfg_findAttribute(cfg_root_t * __restrict cfg, const char *csSec, const char *csAttr)
 {  {
        struct tagCfg *av, fav;        struct tagCfg *av, *n;
         register int cx = 0;          register int cx = 0;
   
         if (!cfg) {          if (!cfg) {
                 cfg_SetErr(EINVAL, "Invalid argument(s)");                  cfg_SetErr(EINVAL, "Invalid argument(s)");
                 return -1;                  return -1;
        } else        }
                memset(&fav, 0, sizeof fav); 
   
        if (csSec && *csSec)        TAILQ_FOREACH_SAFE(av, cfg, cfg_next, n) {
                AIT_KEY(&fav.cfg_sec) = crcFletcher16((u_short*) csSec,  
                                E_ALIGN(strlen(csSec), 2) / 2); 
        if (csAttr) 
                AIT_KEY(&fav.cfg_attr) = crcFletcher16((u_short*) csAttr,  
                                E_ALIGN(strlen(csAttr), 2) / 2); 
 
        TAILQ_FOREACH(av, cfg, cfg_next) { 
                 ++cx;                  ++cx;
                if (!cfg_tree_cmp(&fav, av))
                        return cx;                if ((!csSec && AIT_ISEMPTY(&av->cfg_sec)) || 
                                 (csSec && !AIT_ISEMPTY(&av->cfg_sec) && 
                                  !strcmp(csSec, AIT_GET_STR(&av->cfg_sec))))
                         if (!AIT_ISEMPTY(&av->cfg_attr) && csAttr && 
                                         !strcmp(csAttr, AIT_GET_STR(&av->cfg_attr)))
                                 return cx;
         }          }
   
         return 0;          return 0;
Line 200  cfg_findAttribute(cfg_root_t * __restrict cfg, const c Line 227  cfg_findAttribute(cfg_root_t * __restrict cfg, const c
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: 0 item not found, -1 error or 1 removed item   * return: 0 item not found, -1 error or 1 removed item
  */   */
 int  int
Line 297  cfg_setAttribute(cfg_root_t * __restrict cfg, const ch Line 324  cfg_setAttribute(cfg_root_t * __restrict cfg, const ch
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: NULL item not found or null parameters, !=NULL value const string   * return: NULL item not found or null parameters, !=NULL value const string
  */   */
 const char *  const char *
Line 320  cfg_getAttribute(cfg_root_t * __restrict cfg, const ch Line 347  cfg_getAttribute(cfg_root_t * __restrict cfg, const ch
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: value   * return: value
  */   */
 long  long
Line 337  cfg_getAttributeLong(cfg_root_t * __restrict cfg, cons Line 364  cfg_getAttributeLong(cfg_root_t * __restrict cfg, cons
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: value   * return: value
  */   */
 long long  long long
Line 354  cfg_getAttributeLLong(cfg_root_t * __restrict cfg, con Line 381  cfg_getAttributeLLong(cfg_root_t * __restrict cfg, con
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: value   * return: value
  */   */
 double  double
Line 371  cfg_getAttributeDouble(cfg_root_t * __restrict cfg, co Line 398  cfg_getAttributeDouble(cfg_root_t * __restrict cfg, co
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * return: value   * return: value
  */   */
 long double  long double
Line 388  cfg_getAttributeLDouble(cfg_root_t * __restrict cfg, c Line 415  cfg_getAttributeLDouble(cfg_root_t * __restrict cfg, c
  *   *
  * @cfg = Config root   * @cfg = Config root
  * @csSec = Config section //[{csSec}], if NULL unset in *default* section   * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL as *any* attribute * @csAttr = Config attribute //{csAttr} = ...
  * @val = Return buffer for item Value //... = {val}   * @val = Return buffer for item Value //... = {val}
  * @csDefValue = *Default Value* for return in //{val}, if not found item in config   * @csDefValue = *Default Value* for return in //{val}, if not found item in config
  * return: 0 item not found, -1 error or >0 number of copied bytes in //{val}   * return: 0 item not found, -1 error or >0 number of copied bytes in //{val}

Removed from v.1.18  
changed lines
  Added in v.1.19


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