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

version 1.6.4.5, 2012/04/04 11:43:05 version 1.8.4.3, 2012/07/30 11:23:09
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 121  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg Line 122  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg
                 }                  }
   
                 /* *NEW PAIR* alloc new pair element */                  /* *NEW PAIR* alloc new pair element */
                av = malloc(sizeof(struct tagCfg));                av = io_malloc(sizeof(struct tagCfg));
                 if (!av) {                  if (!av) {
                         LOGERR;                          LOGERR;
                         return -1;                          return -1;
Line 133  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg Line 134  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg
                 }                  }
   
                 /* check for continues line */                  /* check for continues line */
                psAttr = line + strlen(line) - 1;                psAttr = line + (*line ? strlen(line) : 1) - 1;
                 if (*psAttr == '\\') {                  if (*psAttr == '\\') {
                         *psAttr = 0;                          *psAttr = 0;
                         flg = 1;                          flg = 1;
Line 204  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 205  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
 {  {
         struct tagCfg *av;          struct tagCfg *av;
         time_t tim;          time_t tim;
        char szTime[STRSIZ] = { 0 }, szSection[STRSIZ] = { 0 };        char line[BUFSIZ] = { 0 }, szSection[STRSIZ] = { 0 };
   
         time(&tim);  
         strftime(szTime, sizeof szTime, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));  
         if (!cfg_Write(f, "## Write Config :: %s\n#\n", szTime)) {  
                 LOGERR;  
                 return -1;  
         }  
   
         CFG_RC_LOCK(cfg);          CFG_RC_LOCK(cfg);
         _invertQueue(cfg);          _invertQueue(cfg);
         SLIST_FOREACH(av, cfg, cfg_next) {          SLIST_FOREACH(av, cfg, cfg_next) {
                   /* add +1 line for section [] */
                 if (!AIT_ISEMPTY(&av->cfg_sec) &&                   if (!AIT_ISEMPTY(&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);
Line 234  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 229  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
                         }                          }
                 }                  }
   
                if (!cfg_Write(f, ((whitespace) ? "%s = %s\n" : "%s=%s\n"),                 /* build line */
                                        AIT_GET_STR(&av->cfg_attr, char*), AIT_GET_STR(&av->cfg_val))) {                memset(line, 0, sizeof line);
                 if (!AIT_ISEMPTY(&av->cfg_attr) && AIT_TYPE(&av->cfg_attr) == string) {
                         strlcpy(line, AIT_GET_STR(&av->cfg_attr), sizeof line);
                         if (whitespace)
                                 strlcat(line, " = ", sizeof line);
                         else
                                 strlcat(line, "=", sizeof line);
                 }
                 if (!AIT_ISEMPTY(&av->cfg_val) && AIT_TYPE(&av->cfg_val) == string)
                         strlcat(line, AIT_GET_STR(&av->cfg_val), sizeof line);
 
                 /* write */
                 if (!cfg_Write(f, "%s\n", line)) {
                         LOGERR;                          LOGERR;
                         CFG_RC_UNLOCK(cfg);                          CFG_RC_UNLOCK(cfg);
                         return -1;                          return -1;
Line 244  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i Line 251  cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, i
         _invertQueue(cfg);          _invertQueue(cfg);
         CFG_RC_UNLOCK(cfg);          CFG_RC_UNLOCK(cfg);
   
        memset(szTime, 0, sizeof szTime);        if (whitespace) {
        time(&tim);                time(&tim);
        strftime(szTime, sizeof szTime, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));                memset(line, 0, sizeof line);
        if (!cfg_Write(f, "\n#\n## Done. :: %s\n", szTime)) {                strftime(line, sizeof line, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));
                LOGERR;                cfg_Write(f, "\n## Config was saved at :: %s ##\n", line);
                return -1; 
         }          }
   
         return 0;          return 0;
Line 339  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 *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));
                           CFG_RC_LOCK(cfg);
                           SLIST_INSERT_HEAD(cfg, av, cfg_next);
                           CFG_RC_UNLOCK(cfg);
                   }
   
                   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);
                   RB_INSERT(tagRC, cfg, av);
                   CFG_RC_UNLOCK(cfg);
           }
   
           return 0;
   }
   

Removed from v.1.6.4.5  
changed lines
  Added in v.1.8.4.3


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