]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/conf-section.c
Merge remote-tracking branch 'origin/master'
[libucw.git] / ucw / conf-section.c
index f25657d287c7448f1d5744f269c22fd27e0d9f55..30f5898c6347197f17772bc0a9e244894ebd5ae8 100644 (file)
@@ -2,7 +2,7 @@
  *     UCW Library -- Configuration files: sections
  *
  *     (c) 2001--2006 Robert Spalek <robert@ucw.cz>
- *     (c) 2003--2012 Martin Mares <mj@ucw.cz>
+ *     (c) 2003--2014 Martin Mares <mj@ucw.cz>
  *
  *     This software may be freely distributed and used according to the terms
  *     of the GNU Lesser General Public License.
@@ -13,6 +13,7 @@
 #include <ucw/conf-internal.h>
 #include <ucw/clists.h>
 #include <ucw/binsearch.h>
+#include <ucw/gary.h>
 
 #include <string.h>
 
@@ -92,7 +93,7 @@ inspect_section(struct cf_section *sec)
 }
 
 void
-cf_declare_rel_section(const char *name, struct cf_section *sec, void *ptr, uns allow_unknown)
+cf_declare_rel_section(const char *name, struct cf_section *sec, void *ptr, uint allow_unknown)
 {
   struct cf_context *cc = cf_obtain_context();
   if (!cc->sections.cfg)
@@ -121,13 +122,13 @@ cf_declare_rel_section(const char *name, struct cf_section *sec, void *ptr, uns
 }
 
 void
-cf_declare_section(const char *name, struct cf_section *sec, uns allow_unknown)
+cf_declare_section(const char *name, struct cf_section *sec, uint allow_unknown)
 {
   cf_declare_rel_section(name, sec, NULL, allow_unknown);
 }
 
 void
-cf_init_section(const char *name, struct cf_section *sec, void *ptr, uns do_bzero)
+cf_init_section(const char *name, struct cf_section *sec, void *ptr, uint do_bzero)
 {
   if (do_bzero) {
     ASSERT(sec->size);
@@ -140,10 +141,8 @@ cf_init_section(const char *name, struct cf_section *sec, void *ptr, uns do_bzer
       clist_init(ptr + (uintptr_t) ci->ptr);
     else if (ci->cls == CC_DYNAMIC) {
       void **dyn = ptr + (uintptr_t) ci->ptr;
-      if (!*dyn) {                     // replace NULL by an empty array
-       static uns zero = 0;
-       *dyn = (&zero) + 1;
-      }
+      if (!*dyn)                       // replace NULL by an empty array
+       *dyn = GARY_FOREVER_EMPTY;
     }
   if (sec->init) {
     char *msg = sec->init(ptr);
@@ -153,7 +152,7 @@ cf_init_section(const char *name, struct cf_section *sec, void *ptr, uns do_bzer
 }
 
 static char *
-commit_section(struct cf_section *sec, void *ptr, uns commit_all)
+commit_section(struct cf_section *sec, void *ptr, uint commit_all)
 {
   struct cf_context *cc = cf_get_context();
   char *err;
@@ -165,7 +164,7 @@ commit_section(struct cf_section *sec, void *ptr, uns commit_all)
        return "commit of a subsection failed";
       }
     } else if (ci->cls == CC_LIST) {
-      uns idx = 0;
+      uint idx = 0;
       CLIST_FOR_EACH(cnode *, n, * (clist*) (ptr + (uintptr_t) ci->ptr))
        if (idx++, err = commit_section(ci->u.sec, n, commit_all)) {
          msg(L_ERROR, "Cannot commit node #%d of list %s: %s", idx, ci->name, err);
@@ -178,7 +177,7 @@ commit_section(struct cf_section *sec, void *ptr, uns commit_all)
      * hence we need to call them in a fixed order.  */
 #define ARY_LT_X(ary,i,x) ary[i].sec < x.sec || ary[i].sec == x.sec && ary[i].ptr < x.ptr
     struct dirty_section comp = { sec, ptr };
-    uns pos = BIN_SEARCH_FIRST_GE_CMP(cc->dirty.ptr, cc->dirties, comp, ARY_LT_X);
+    uint pos = BIN_SEARCH_FIRST_GE_CMP(cc->dirty.ptr, cc->dirties, comp, ARY_LT_X);
 
     if (commit_all
        || (pos < cc->dirties && cc->dirty.ptr[pos].sec == sec && cc->dirty.ptr[pos].ptr == ptr))