Diff for /libaitcfg/src/parse.c between versions 1.13.2.1 and 1.16.2.1

version 1.13.2.1, 2014/01/30 08:13:09 version 1.16.2.1, 2017/06/30 08:44: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 - 2014Copyright 2004 - 2017
         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 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
   
   
 /*  /*
 static inline void  
 _invertQueue(cfg_root_t * __restrict cfg)  
 {  
         struct tagCfg *item, *next, *prev = NULL;  
   
         SLIST_FOREACH_SAFE(item, cfg, cfg_next, next) {  
                 item->cfg_next.sle_next = prev;  
                 prev = item;  
         }  
         cfg->slh_first = prev;  
 }  
 */  
   
   
 /*  
  * cfgReadConfig() - Read file and add new item at config root   * cfgReadConfig() - Read file and add new item at config root
  *   *
  * @f = File resource   * @f = File resource
Line 71  _invertQueue(cfg_root_t * __restrict cfg) Line 56  _invertQueue(cfg_root_t * __restrict cfg)
 int  int
 cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)
 {  {
        char line[BUFSIZ];        char line[BUFSIZ], origin[BUFSIZ];
         struct tagCfg *av = NULL;          struct tagCfg *av = NULL;
         int flg = 0;          int flg = 0;
         char *psAttr, *psVal, szSection[STRSIZ] = { 0 };          char *psAttr, *psVal, szSection[STRSIZ] = { 0 };
Line 94  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg) Line 79  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)
                         continue;                          continue;
                 } else {                  } else {
                         *psAttr = 0;                          *psAttr = 0;
                           strlcpy(origin, line, sizeof origin);
                         str_Trim(line);                          str_Trim(line);
                 }                  }
   
Line 152  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg) Line 138  cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg)
                 }                  }
                 /* parse pair */                  /* parse pair */
                 if (!(psAttr = strchr(line, '='))) {                  if (!(psAttr = strchr(line, '='))) {
                        AIT_SET_STR(&av->cfg_val, line);                        AIT_SET_STR(&av->cfg_val, origin);
                         EDEBUG(7, "Ignore a/v '%s' ... not found '='", line);                          EDEBUG(7, "Ignore a/v '%s' ... not found '='", line);
                         continue;                          continue;
                 } else {                  } else {
Line 197  int Line 183  int
 cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, int whitespace)  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, int whitespace)
 {  {
         struct tagCfg *av;          struct tagCfg *av;
         time_t tim;  
         char line[BUFSIZ] = { 0 }, szSection[STRSIZ] = { [0 ... STRSIZ - 1] = 0 };          char line[BUFSIZ] = { 0 }, szSection[STRSIZ] = { [0 ... STRSIZ - 1] = 0 };
   
         if (!f || !cfg) {          if (!f || !cfg) {
Line 206  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 191  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
         }          }
   
         CFG_RC_LOCK(cfg);          CFG_RC_LOCK(cfg);
//      _invertQueue(cfg);        RB_FOREACH(av, tagRC, cfg) {
        TAILQ_FOREACH(av, cfg, cfg_next) { 
                 /* empty lines or comment */                  /* empty lines or comment */
                 if (AIT_ISEMPTY(&av->cfg_attr)) {                  if (AIT_ISEMPTY(&av->cfg_attr)) {
                         if (AIT_ISEMPTY(&av->cfg_val))                          if (AIT_ISEMPTY(&av->cfg_val))
Line 218  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 202  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
   
                 /* section [] */                  /* section [] */
                 if (!AIT_ISEMPTY(&av->cfg_sec) && AIT_ADDR(&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_STRZ(&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, "[%s]\n", AIT_GET_STR(&av->cfg_sec))) {                        if (!cfg_Write(f, "\n[%s]\n", AIT_GET_STR(&av->cfg_sec))) {
                                 LOGERR;                                  LOGERR;
 //                              _invertQueue(cfg);  
                                 CFG_RC_UNLOCK(cfg);                                  CFG_RC_UNLOCK(cfg);
                                 return -1;                                  return -1;
                         }                          }
                 } else if (AIT_ISEMPTY(&av->cfg_sec) && *szSection) {                  } else if (AIT_ISEMPTY(&av->cfg_sec) && *szSection) {
                         memset(szSection, 0, sizeof szSection);                          memset(szSection, 0, sizeof szSection);
                        if (!cfg_Write(f, "[]\n")) {                        if (!cfg_Write(f, "\n[]\n")) {
                                 LOGERR;                                  LOGERR;
 //                              _invertQueue(cfg);  
                                 CFG_RC_UNLOCK(cfg);                                  CFG_RC_UNLOCK(cfg);
                                 return -1;                                  return -1;
                         }                          }
Line 251  skip_sec: Line 233  skip_sec:
                 /* write */                  /* write */
                 if (!cfg_Write(f, "%s\n", line)) {                  if (!cfg_Write(f, "%s\n", line)) {
                         LOGERR;                          LOGERR;
 //                      _invertQueue(cfg);  
                         CFG_RC_UNLOCK(cfg);                          CFG_RC_UNLOCK(cfg);
                         return -1;                          return -1;
                 }                  }
         }          }
 //      _invertQueue(cfg);  
         CFG_RC_UNLOCK(cfg);          CFG_RC_UNLOCK(cfg);
   
         if (whitespace) {  
                 time(&tim);  
                 memset(line, 0, sizeof line);  
                 strftime(line, sizeof line, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));  
                 cfg_Write(f, "\n## Config was saved at :: %s ##\n", line);  
         }  
   
         return 0;          return 0;
 }  }
   
Line 469  cfgWriteLines(FILE *f, const char *delim, const char * Line 442  cfgWriteLines(FILE *f, const char *delim, const char *
                 AIT_INIT_VAL2(v, string);                  AIT_INIT_VAL2(v, string);
   
         TAILQ_FOREACH(av, cfg, cfg_next) {          TAILQ_FOREACH(av, cfg, cfg_next) {
                 if (AIT_ISEMPTY(&av->cfg_attr))  
                         continue;  
                 if (section) {                  if (section) {
                         if (!AIT_ISEMPTY(&av->cfg_sec) && *section)                          if (!AIT_ISEMPTY(&av->cfg_sec) && *section)
                                 continue;                                  continue;
                        if (strcmp(section, AIT_GET_STR(&av->cfg_sec)))                        if (strcmp(section, AIT_GET_STRZ(&av->cfg_sec)))
                                 continue;                                  continue;
                 }                  }
   
Line 482  cfgWriteLines(FILE *f, const char *delim, const char * Line 453  cfgWriteLines(FILE *f, const char *delim, const char *
                         AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_sec));                          AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_sec));
                         AIT_SET_STRCAT(v, SEC_LINES_DELIM);                          AIT_SET_STRCAT(v, SEC_LINES_DELIM);
                 }                  }
                AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_attr));                if (!AIT_ISEMPTY(&av->cfg_attr)) {
                AIT_SET_STRCAT(v, delim);                        AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_attr));
                         AIT_SET_STRCAT(v, delim);
                 }
                 if (!AIT_ISEMPTY(&av->cfg_val))                  if (!AIT_ISEMPTY(&av->cfg_val))
                         AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_val));                          AIT_SET_STRCAT(v, AIT_GET_STR(&av->cfg_val));
                 AIT_SET_STRCAT(v, eol);                  AIT_SET_STRCAT(v, eol);

Removed from v.1.13.2.1  
changed lines
  Added in v.1.16.2.1


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