} else if (ci->cls == CC_LIST) {
inspect_section(ci->u.sec);
sec->flags |= SEC_FLAG_DYNAMIC | SEC_FLAG_CANT_COPY;
- } else if (ci->cls == CC_DYNAMIC)
+ } else if (ci->cls == CC_DYNAMIC || ci->cls == CC_BITMAP)
sec->flags |= SEC_FLAG_DYNAMIC;
else if (ci->cls == CC_PARSER) {
sec->flags |= SEC_FLAG_CANT_COPY;
ASSERT(sec->size);
bzero(ptr, sec->size);
}
- for (uns i=0; sec->cfg[i].cls; i++)
- if (sec->cfg[i].cls == CC_SECTION)
- cf_init_section(sec->cfg[i].name, sec->cfg[i].u.sec, ptr + (addr_int_t) sec->cfg[i].ptr, 0);
- else if (sec->cfg[i].cls == CC_LIST)
- clist_init(ptr + (addr_int_t) sec->cfg[i].ptr);
+ for (struct cf_item *ci=sec->cfg; ci->cls; ci++)
+ if (ci->cls == CC_SECTION)
+ cf_init_section(ci->name, ci->u.sec, ptr + (uintptr_t) ci->ptr, 0);
+ else if (ci->cls == CC_LIST)
+ 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 (sec->init) {
byte *msg = sec->init(ptr);
if (msg)
static byte *
commit_section(struct cf_section *sec, void *ptr, uns commit_all)
{
- struct cf_item *ci;
byte *err;
- for (ci=sec->cfg; ci->cls; ci++)
+ for (struct cf_item *ci=sec->cfg; ci->cls; ci++)
if (ci->cls == CC_SECTION) {
- if ((err = commit_section(ci->u.sec, ptr + (addr_int_t) ci->ptr, commit_all))) {
+ if ((err = commit_section(ci->u.sec, ptr + (uintptr_t) ci->ptr, commit_all))) {
log(L_ERROR, "Cannot commit section %s: %s", ci->name, err);
return "commit of a subsection failed";
}
} else if (ci->cls == CC_LIST) {
uns idx = 0;
- CLIST_FOR_EACH(cnode *, n, * (clist*) (ptr + (addr_int_t) ci->ptr))
+ CLIST_FOR_EACH(cnode *, n, * (clist*) (ptr + (uintptr_t) ci->ptr))
if (idx++, err = commit_section(ci->u.sec, n, commit_all)) {
log(L_ERROR, "Cannot commit node #%d of list %s: %s", idx, ci->name, err);
return "commit of a list failed";
}
- } else if (ci->cls == CC_DYNAMIC) {
- void **dyn = ptr + (addr_int_t) ci->ptr;
- if (!*dyn) { // replace NULL by an empty array
- static uns zero = 0;
- *dyn = (&zero) + 1;
- }
}
if (sec->commit) {
/* We have to process the whole tree of sections even if just a few changes