cfg framework: fix sanity checks (again)
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Fri, 3 Jul 2009 16:28:38 +0000 (18:28 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Fri, 3 Jul 2009 16:32:50 +0000 (18:32 +0200)
The previous sanity check fix wrongly assumed that CFG_VAR_MASK
would return 1<<type and not type.

cfg/cfg.c

index acc0ea3..a881fc2 100644 (file)
--- a/cfg/cfg.c
+++ b/cfg/cfg.c
@@ -66,7 +66,7 @@ int cfg_declare(char *group_name, cfg_def_t *def, void *values, int def_size,
                mapping[i].def = &(def[i]);
                mapping[i].name_len = strlen(def[i].name);
                /* record all the types for sanity checks */
-               types|=CFG_VAR_MASK(def[i].type);
+               types|=1 << CFG_VAR_MASK(def[i].type);
 
                /* padding depends on the type of the next variable */
                switch (CFG_VAR_MASK(def[i].type)) {
@@ -133,7 +133,7 @@ int cfg_declare(char *group_name, cfg_def_t *def, void *values, int def_size,
 
        /* fix the computed size (char*, str or pointer members will force 
           structure padding to multiple of sizeof(pointer)) */
-       if (types & (CFG_VAR_STRING|CFG_VAR_STR|CFG_VAR_POINTER))
+       if (types & ((1<<CFG_VAR_STRING)|(1<<CFG_VAR_STR)|(1<<CFG_VAR_POINTER)))
                size=ROUND_POINTER(size);
        /* minor validation */
        if (size != def_size) {