Diff for /libaitcfg/src/parse.c between versions 1.8 and 1.9

version 1.8, 2012/07/22 21:54:47 version 1.9, 2012/08/01 00:39:11
Line 80  _invertQueue(cfg_root_t * __restrict cfg) Line 80  _invertQueue(cfg_root_t * __restrict cfg)
  * @cfg = Config root   * @cfg = Config root
  * return: -1 error or 0 ok   * return: -1 error or 0 ok
  */   */
int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)int
 cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)
 {  {
         char line[BUFSIZ];          char line[BUFSIZ];
         struct tagCfg *av = NULL;          struct tagCfg *av = NULL;
Line 344  cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_root_t Line 345  cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_root_t
         pthread_mutex_destroy(&add_cfg->rc_mtx);          pthread_mutex_destroy(&add_cfg->rc_mtx);
         return 0;          return 0;
 }  }
   
   /*
    * cfgReadLines() - Read custom lines and add new item at config root
    *
    * @f = File resource
    * @delim = Custom delimiter, if =NULL default is '='
    * @end = Custom user end of file, if =NULL default is EOF
    * @cfg = Config root
    * return: -1 error or 0 ok
    */
   int
   cfgReadLines(FILE *f, const char *delim, const char *end, cfg_root_t * __restrict cfg)
   {
           char line[BUFSIZ];
           struct tagCfg *d, *av = NULL;
           char *psAttr, *psVal = NULL;
   
           while (!feof(f)) {
                   memset(line, 0, sizeof line);
                   fgets(line, sizeof line - 1, f);
                   /* check for user end-of-file */
                   if (strspn(line, end))
                           break;
   
                   if (!(psAttr = strpbrk(line, "\r\n"))) {
                           /* skip line, too long */
                           continue;
                   } else {
                           *psAttr = 0;
                           io_TrimStr(line);
                           if (!*line)
                                   continue;
                   }
   
                   if (!io_MakeAV2(line, delim, &psAttr, &psVal))
                           continue;
                   else {
                           io_LTrimStr(psVal);
                           io_RTrimStr(psAttr);
                   }
   
                   /* *NEW PAIR* alloc new pair element */
                   av = io_malloc(sizeof(struct tagCfg));
                   if (!av) {
                           LOGERR;
                           return -1;
                   } else
                           memset(av, 0, sizeof(struct tagCfg));
   
                   if (psVal)
                           AIT_SET_STR(&av->cfg_val, psVal);
                   AIT_SET_STR(&av->cfg_attr, psAttr);
                   AIT_KEY(&av->cfg_attr) = crcFletcher16(AIT_GET_LIKE(&av->cfg_attr, u_short*), 
                                   io_align(AIT_LEN(&av->cfg_attr) - 1, 1) / 2);
   
                   CFG_RC_LOCK(cfg);
                   /* find & delete duplicates */
                   if ((d = RB_FIND(tagRC, cfg, av))) {
                           RB_REMOVE(tagRC, cfg, d);
                           SLIST_REMOVE(cfg, d, tagCfg, cfg_next);
   
                           AIT_FREE_VAL(&d->cfg_val);
                           AIT_FREE_VAL(&d->cfg_attr);
                           AIT_FREE_VAL(&d->cfg_sec);
                           io_free(d);
                   }
   
                   SLIST_INSERT_HEAD(cfg, av, cfg_next);
                   RB_INSERT(tagRC, cfg, av);
                   CFG_RC_UNLOCK(cfg);
           }
   
           return 0;
   }
   

Removed from v.1.8  
changed lines
  Added in v.1.9


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