- UCI_ASSERT(ctx, res != NULL);
- UCI_ASSERT(ctx, p != NULL);
- UCI_ASSERT(ctx, section && uci_validate_name(section));
- if (option)
- UCI_ASSERT(ctx, uci_validate_name(option));
+ UCI_ASSERT(ctx, ptr != NULL);
+
+ if (str)
+ UCI_INTERNAL(uci_parse_ptr, ctx, ptr, str);
+
+ ptr->flags |= UCI_LOOKUP_DONE;
+
+ /* look up the package first */
+ e = uci_lookup_list(&ctx->root, ptr->package);
+ if (!e) {
+ UCI_INTERNAL(uci_load, ctx, ptr->package, &ptr->p);
+ if (!ptr->p)
+ goto notfound;
+ } else {
+ ptr->p = uci_to_package(e);
+ }
+
+ if (!ptr->section)
+ 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)
+ e = uci_lookup_ext_section(ctx, ptr);
+ else
+ e = uci_lookup_list(&ptr->p->sections, ptr->section);