Diff for /libaitcfg/src/parse.c between versions 1.8.4.3 and 1.10.2.1

version 1.8.4.3, 2012/07/30 11:23:09 version 1.10.2.1, 2012/08/06 15:08:26
Line 116  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg) Line 116  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)
                                 flg = 0;                                  flg = 0;
                         /* concat line to value */                          /* concat line to value */
                         AIT_SET_STRCAT(&av->cfg_val, line);                          AIT_SET_STRCAT(&av->cfg_val, line);
                        if (!flg)                        if (!flg && AIT_ADDR(&av->cfg_val))
                                 io_UnquotStr((char*) AIT_GET_STR(&av->cfg_val));                                  io_UnquotStr((char*) AIT_GET_STR(&av->cfg_val));
                         continue;                          continue;
                 }                  }
Line 211  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 211  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
         _invertQueue(cfg);          _invertQueue(cfg);
         SLIST_FOREACH(av, cfg, cfg_next) {          SLIST_FOREACH(av, cfg, cfg_next) {
                 /* add +1 line for section [] */                  /* add +1 line for section [] */
                if (!AIT_ISEMPTY(&av->cfg_sec) &&                 if (!AIT_ISEMPTY(&av->cfg_sec) && AIT_ADDR(&av->cfg_sec) && 
                                 strcmp(AIT_GET_STR(&av->cfg_sec), szSection)) {                                  strcmp(AIT_GET_STR(&av->cfg_sec), szSection)) {
                         strlcpy(szSection, AIT_GET_STR(&av->cfg_sec), sizeof szSection);                          strlcpy(szSection, AIT_GET_STR(&av->cfg_sec), sizeof szSection);
                         if (!cfg_Write(f, "\n[%s]\n", AIT_GET_STR(&av->cfg_sec))) {                          if (!cfg_Write(f, "\n[%s]\n", AIT_GET_STR(&av->cfg_sec))) {
Line 232  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 232  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
                 /* build line */                  /* build line */
                 memset(line, 0, sizeof line);                  memset(line, 0, sizeof line);
                 if (!AIT_ISEMPTY(&av->cfg_attr) && AIT_TYPE(&av->cfg_attr) == string) {                  if (!AIT_ISEMPTY(&av->cfg_attr) && AIT_TYPE(&av->cfg_attr) == string) {
                        strlcpy(line, AIT_GET_STR(&av->cfg_attr), sizeof line);                        strlcpy(line, AIT_GET_STRZ(&av->cfg_attr), sizeof line);
                         if (whitespace)                          if (whitespace)
                                 strlcat(line, " = ", sizeof line);                                  strlcat(line, " = ", sizeof line);
                         else                          else
                                 strlcat(line, "=", sizeof line);                                  strlcat(line, "=", sizeof line);
                 }                  }
                 if (!AIT_ISEMPTY(&av->cfg_val) && AIT_TYPE(&av->cfg_val) == string)                  if (!AIT_ISEMPTY(&av->cfg_val) && AIT_TYPE(&av->cfg_val) == string)
                        strlcat(line, AIT_GET_STR(&av->cfg_val), sizeof line);                        strlcat(line, AIT_GET_STRZ(&av->cfg_val), sizeof line);
   
                 /* write */                  /* write */
                 if (!cfg_Write(f, "%s\n", line)) {                  if (!cfg_Write(f, "%s\n", line)) {
Line 306  cfgConcatConfig(cfg_root_t * __restrict cfg, cfg_root_ Line 306  cfgConcatConfig(cfg_root_t * __restrict cfg, cfg_root_
 int  int
 cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_root_t * __restrict add_cfg)  cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_root_t * __restrict add_cfg)
 {  {
        struct tagCfg *item, *merge, *add_next, *next = NULL;        struct tagCfg *item, *merge, *add_next, *next;
         int flg;          int flg;
   
         if (!cfg || !add_cfg)          if (!cfg || !add_cfg)
Line 314  cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_root_t Line 314  cfgMergeConfig(cfg_root_t * __restrict cfg, cfg_root_t
   
         CFG_RC_LOCK(add_cfg);          CFG_RC_LOCK(add_cfg);
         CFG_RC_LOCK(cfg);          CFG_RC_LOCK(cfg);
   
           /* merge lists */
         SLIST_FOREACH_SAFE(item, add_cfg, cfg_next, add_next) {          SLIST_FOREACH_SAFE(item, add_cfg, cfg_next, add_next) {
                 flg = 0;                  flg = 0;
                 SLIST_FOREACH_SAFE(merge, cfg, cfg_next, next) {                  SLIST_FOREACH_SAFE(merge, cfg, cfg_next, next) {
                         if (AIT_ISEMPTY(&merge->cfg_sec) && AIT_ISEMPTY(&item->cfg_sec)) {                          if (AIT_ISEMPTY(&merge->cfg_sec) && AIT_ISEMPTY(&item->cfg_sec)) {
                                 SLIST_INSERT_AFTER(merge, item, cfg_next);  
                                 RB_INSERT(tagRC, cfg, item);  
                                 flg = 1;                                  flg = 1;
                                 break;                                  break;
                         }                          }
                         if (!AIT_ISEMPTY(&merge->cfg_sec) && !AIT_ISEMPTY(&item->cfg_sec) &&                           if (!AIT_ISEMPTY(&merge->cfg_sec) && !AIT_ISEMPTY(&item->cfg_sec) && 
                                           AIT_ADDR(&merge->cfg_sec) && AIT_ADDR(&item->cfg_sec) &&
                                         !strcmp(AIT_GET_STR(&merge->cfg_sec), AIT_GET_STR(&item->cfg_sec))) {                                          !strcmp(AIT_GET_STR(&merge->cfg_sec), AIT_GET_STR(&item->cfg_sec))) {
                                 SLIST_INSERT_AFTER(merge, item, cfg_next);  
                                 RB_INSERT(tagRC, cfg, item);  
                                 flg = 1;                                  flg = 1;
                                 break;                                  break;
                         }                          }
                 }                  }
   
                if (!flg) {                if (!flg)
                         SLIST_INSERT_HEAD(cfg, item, cfg_next);
                 else
                         SLIST_INSERT_AFTER(merge, item, cfg_next);                          SLIST_INSERT_AFTER(merge, item, cfg_next);
                        RB_INSERT(tagRC, cfg, item);                RB_INSERT(tagRC, cfg, item);
                } 
         }          }
   
         CFG_RC_UNLOCK(cfg);          CFG_RC_UNLOCK(cfg);
         CFG_RC_UNLOCK(add_cfg);          CFG_RC_UNLOCK(add_cfg);
   
Line 359  int Line 360  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;
   
         while (!feof(f)) {          while (!feof(f)) {
Line 391  cfgReadLines(FILE *f, const char *delim, const char *e Line 392  cfgReadLines(FILE *f, const char *delim, const char *e
                 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);  
                 }  
   
                 if (psVal)                  if (psVal)
                         AIT_SET_STR(&av->cfg_val, psVal);                          AIT_SET_STR(&av->cfg_val, psVal);
Line 405  cfgReadLines(FILE *f, const char *delim, const char *e Line 402  cfgReadLines(FILE *f, const char *delim, const char *e
                                 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.3  
changed lines
  Added in v.1.10.2.1


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