ptr->flags |= UCI_LOOKUP_DONE;
/* look up the package first */
- e = uci_lookup_list(&ctx->root, ptr->package);
+ if (ptr->p)
+ e = &ptr->p->e;
+ else
+ e = uci_lookup_list(&ctx->root, ptr->package);
+
if (!e) {
UCI_INTERNAL(uci_load, ctx, ptr->package, &ptr->p);
if (!ptr->p)
ptr->last = e;
}
- if (!ptr->section)
+ if (!ptr->section && !ptr->s)
goto complete;
/* if the section name validates as a regular name, pass through
* to the regular uci_lookup function call */
- if (ptr->flags & UCI_LOOKUP_EXTENDED) {
+ if (ptr->s) {
+ e = &ptr->s->e;
+ } else if (ptr->flags & UCI_LOOKUP_EXTENDED) {
if (extended)
e = uci_lookup_ext_section(ctx, ptr);
else