Diff for /libaitcfg/src/parse.c between versions 1.8.4.1 and 1.8.4.4

version 1.8.4.1, 2012/07/30 09:40:19 version 1.8.4.4, 2012/07/30 11:44:35
Line 359  int Line 359  int
 cfgReadLines(FILE *f, const char *delim, const char *end, cfg_root_t * __restrict cfg)  cfgReadLines(FILE *f, const char *delim, const char *end, cfg_root_t * __restrict cfg)
 {  {
         char line[BUFSIZ];          char line[BUFSIZ];
        struct tagCfg *av = NULL;        struct tagCfg *d, *av = NULL;
         char *psAttr, *psVal = NULL;          char *psAttr, *psVal = NULL;
         int ret;  
   
         while (!feof(f)) {          while (!feof(f)) {
                 memset(line, 0, sizeof line);                  memset(line, 0, sizeof line);
                 fgets(line, sizeof line - 1, f);                  fgets(line, sizeof line - 1, f);
                 /* check for user end-of-file */                  /* check for user end-of-file */
                if (!strcmp(line, end))                if (strspn(line, end))
                         break;                          break;
   
                 if (!(psAttr = strpbrk(line, "\r\n"))) {                  if (!(psAttr = strpbrk(line, "\r\n"))) {
Line 376  cfgReadLines(FILE *f, const char *delim, const char *e Line 375  cfgReadLines(FILE *f, const char *delim, const char *e
                 } else {                  } else {
                         *psAttr = 0;                          *psAttr = 0;
                         io_TrimStr(line);                          io_TrimStr(line);
                           if (!*line)
                                   continue;
                 }                  }
                /* check for comment or empty line */
                if (!*line)                if (!io_MakeAV2(line, delim, &psAttr, &psVal))
                         continue;                          continue;
                   else {
                           io_LTrimStr(psVal);
                           io_RTrimStr(psAttr);
                   }
   
                 ret = io_MakeAV2((char**) &line, delim, psAttr, psVal);  
                 io_LTrimStr(psVal);  
                 io_RTrimStr(psAttr);  
   
                 /* *NEW PAIR* alloc new pair element */                  /* *NEW PAIR* alloc new pair element */
                 av = io_malloc(sizeof(struct tagCfg));                  av = io_malloc(sizeof(struct tagCfg));
                 if (!av) {                  if (!av) {
                         LOGERR;                          LOGERR;
                         return -1;                          return -1;
                } else {                } else
                         memset(av, 0, sizeof(struct tagCfg));                          memset(av, 0, sizeof(struct tagCfg));
                         CFG_RC_LOCK(cfg);  
                         SLIST_INSERT_HEAD(cfg, av, cfg_next);  
                         CFG_RC_UNLOCK(cfg);  
                 }  
   
                AIT_SET_STR(&av->cfg_val, psVal ? psVal : "");                if (psVal)
                         AIT_SET_STR(&av->cfg_val, psVal);
                 AIT_SET_STR(&av->cfg_attr, psAttr);                  AIT_SET_STR(&av->cfg_attr, psAttr);
                 AIT_KEY(&av->cfg_attr) = crcFletcher16(AIT_GET_LIKE(&av->cfg_attr, u_short*),                   AIT_KEY(&av->cfg_attr) = crcFletcher16(AIT_GET_LIKE(&av->cfg_attr, u_short*), 
                                 io_align(AIT_LEN(&av->cfg_attr) - 1, 1) / 2);                                  io_align(AIT_LEN(&av->cfg_attr) - 1, 1) / 2);
   
                 CFG_RC_LOCK(cfg);                  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);                  RB_INSERT(tagRC, cfg, av);
                 CFG_RC_UNLOCK(cfg);                  CFG_RC_UNLOCK(cfg);
         }          }

Removed from v.1.8.4.1  
changed lines
  Added in v.1.8.4.4


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