Diff for /libaitcfg/src/parse.c between versions 1.18 and 1.19

version 1.18, 2019/11/21 14:30:02 version 1.19, 2021/11/26 01:15: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 - 2018Copyright 2004 - 2021
         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 269  skip_sec: Line 269  skip_sec:
         return 0;          return 0;
 }  }
   
   /*
    * cfgWriteConfigRaw() - Write config from memory by list
    *
    * @f = File handle
    * @cfg = Config root
    * @whitespace = Additional whitespace characters to file
    * return: -1 error or 0 ok
    */
   int
   cfgWriteConfigRaw(FILE *f, cfg_root_t * __restrict cfg, int whitespace)
   {
           struct tagCfg *av, *nxt;
           char line[BUFSIZ] = { 0 }, szSection[STRSIZ] = { [0 ... STRSIZ - 1] = 0 };
   
           if (!f || !cfg) {
                   cfg_SetErr(EINVAL, "Invalid parameter(s)");
                   return -1;
           }
   
           CFG_RC_LOCK(cfg);
           TAILQ_FOREACH_SAFE(av, cfg, cfg_next, nxt) {
                   /* empty lines or comment */
                   if (AIT_ISEMPTY(&av->cfg_attr)) {
                           if (AIT_ISEMPTY(&av->cfg_val))
                                   continue;
                           strlcpy(line, AIT_GET_STR(&av->cfg_val), sizeof line);
                           goto skip_sec;
                   }
   
                   /* section [] */
                   if (!AIT_ISEMPTY(&av->cfg_sec) && AIT_ADDR(&av->cfg_sec) && 
                                   strcmp(AIT_GET_STRZ(&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;
                           }
                   } else 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;
                           }
                   }
   
                   /* build line */
                   memset(line, 0, sizeof line);
                   if (!AIT_ISEMPTY(&av->cfg_attr) && AIT_TYPE(&av->cfg_attr) == string) {
                           strlcpy(line, AIT_GET_STRZ(&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_STRZ(&av->cfg_val), sizeof line);
   skip_sec:
                   /* write */
                   if (!cfg_Write(f, "%s\n", line)) {
                           LOGERR;
                           CFG_RC_UNLOCK(cfg);
                           return -1;
                   }
           }
           CFG_RC_UNLOCK(cfg);
   
           return 0;
   }
 /*  /*
  * cfgConcatConfig() - Concat two configs into one   * cfgConcatConfig() - Concat two configs into one
  *   *

Removed from v.1.18  
changed lines
  Added in v.1.19


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