Diff for /libaitcfg/src/parse.c between versions 1.6.4.1 and 1.6.4.2

version 1.6.4.1, 2012/04/02 14:39:02 version 1.6.4.2, 2012/04/03 09:21:06
Line 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
 #include "aitcfg.h"  #include "aitcfg.h"
   
   
#if 0static inline int
// cfgDbg() Debug/Log operationcfg_Write(FILE *f, char *fmt, ...)
static inline int cfgDbg(FILE *f, char *fmt, ...) 
 {  {
         int ret = 0;          int ret = 0;
         va_list lst;          va_list lst;
Line 61  static inline int cfgDbg(FILE *f, char *fmt, ...) Line 60  static inline int cfgDbg(FILE *f, char *fmt, ...)
         return ret;          return ret;
 }  }
   
/*static inline void
 * InvertQueue() InvertQueue order //{cfg} list of elements for revert_invertQueue(cfg_root_t * __restrict cfg)
 * @cfg = Head list element for revert  
*/ 
static inline void InvertQueue(sl_config * __restrict cfg) 
 {  {
        struct tagPair *item, *next, *prev = NULL;        struct tagCfg *item, *next, *prev = NULL;
   
        for (item = cfg->slh_first; item; item = next) {        SLIST_FOREACH_SAFE(item, cfg, cfg_next, next) {
                next = item->sle_next;                item->cfg_next.sle_next = prev;
                item->sle_next = prev; 
                 prev = item;                  prev = item;
         }          }
         cfg->slh_first = prev;          cfg->slh_first = prev;
 }  }
   
 // cfgWrite() Write to file from config list  
 static inline int cfgWrite(FILE *f, sl_config * __restrict cfg, int whitespace)  
 {  
         struct tagPair *av;  
         time_t tim;  
         char szTime[MAX_STR + 1];  
         u_char szSection[MAX_STR + 1];  
   
         bzero(szSection, MAX_STR + 1);  
   
         bzero(szTime, MAX_STR + 1);  
         time(&tim);  
         strftime(szTime, MAX_STR, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));  
         if (!cfgDbg(f, "## Write Config :: %s\n#\n", szTime)) {  
                 LOGERR;  
                 return -1;  
         }  
   
         InvertQueue(cfg);  
         for (av = cfg->slh_first; av; av = av->sle_next) {  
                 if (av->psSection && strcmp((char*) av->psSection, (char*) szSection)) {  
                         strlcpy((char*) szSection, (char*) av->psSection, MAX_STR + 1);  
                         if (!cfgDbg(f, "\n[%s]\n", av->psSection)) {  
                                 LOGERR;  
                                 return -1;  
                         }  
                 }  
                 if (!av->psSection && *szSection) {  
                         bzero(szSection, MAX_STR + 1);  
                         if (!cfgDbg(f, "\n[]\n")) {  
                                 LOGERR;  
                                 return -1;  
                         }  
                 }  
   
                 if (whitespace) {  
                         if (!cfgDbg(f, "%s = %s\n", av->psAttribute, av->psValue)) {  
                                 LOGERR;  
                                 return -1;  
                         }  
                 } else {  
                         if (!cfgDbg(f, "%s=%s\n", av->psAttribute, av->psValue)) {  
                                 LOGERR;  
                                 return -1;  
                         }  
                 }  
         }  
         InvertQueue(cfg);  
   
         bzero(szTime, MAX_STR + 1);  
         time(&tim);  
         strftime(szTime, MAX_STR, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));  
         if (!cfgDbg(f, "\n#\n## Done. :: %s\n", szTime)) {  
                 LOGERR;  
                 return -1;  
         }  
   
         return 0;  
 }  
   
 // ---------------------------------------------------  
 #endif  
   
 /*  /*
  * cfgReadConfig() - Read file and add new item at config root   * cfgReadConfig() - Read file and add new item at config root
  *   *
Line 253  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg Line 186  int cfgReadConfig(FILE *f, cfg_root_t * __restrict cfg
                 CFG_RC_LOCK(cfg);                  CFG_RC_LOCK(cfg);
                 RB_INSERT(tagRC, cfg, av);                  RB_INSERT(tagRC, cfg, av);
                 CFG_RC_UNLOCK(cfg);                  CFG_RC_UNLOCK(cfg);
           }
   
           return 0;
   }
   
   /*
    * cfgWriteConfig() - Write config from memory
    *
    * @f = File handle
    * @cfg = Config root
    * @whitespace = Additional whitespace characters to file
    * return: -1 error or 0 ok
    */
   int
   cfgWriteConfig(FILE *f, cfg_root_t * __restrict cfg, int whitespace)
   {
           struct tagCfg *av;
           time_t tim;
           char szTime[STRSIZ] = { 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);
           _invertQueue(cfg);
           SLIST_FOREACH(av, cfg, cfg_next) {
                   if (!AIT_ISEMPTY(&av->cfg_sec) && 
                                   strcmp(AIT_GET_STR(&av->cfg_sec), szSection)) {
                           strlcpy(szSection, AIT_GET_STR(&av->cfg_sec), sizeof szSection);
                           if (!cfg_Write(f, "\n[%s]\n", AIT_GET_STR(&av->cfg_sec))) {
                                   LOGERR;
                                   CFG_RC_UNLOCK(cfg);
                                   return -1;
                           }
                   }
                   if (AIT_ISEMPTY(&av->cfg_sec) && *szSection) {
                           memset(szSection, 0, sizeof szSection);
                           if (!cfg_Write(f, "\n[]\n")) {
                                   LOGERR;
                                   CFG_RC_UNLOCK(cfg);
                                   return -1;
                           }
                   }
   
                   if (!cfg_Write(f, ((whitespace) ? "%s = %s\n" : "%s=%s\n"), 
                                           AIT_GET_STR(&av->cfg_attr), AIT_GET_STR(&av->cfg_val))) {
                           LOGERR;
                           CFG_RC_UNLOCK(cfg);
                           return -1;
                   }
           }
           _invertQueue(cfg);
           CFG_RC_UNLOCK(cfg);
   
           memset(szTime, 0, sizeof szTime);
           time(&tim);
           strftime(szTime, sizeof szTime, "(UTC) %Y-%m-%d %H:%M:%S", gmtime(&tim));
           if (!cfg_Write(f, "\n#\n## Done. :: %s\n", szTime)) {
                   LOGERR;
                   return -1;
         }          }
   
         return 0;          return 0;

Removed from v.1.6.4.1  
changed lines
  Added in v.1.6.4.2


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