+/**
+ * uci_lookup_package: look up a package
+ * @ctx: uci context
+ * @name: name of the package
+ */
+static inline struct uci_package *
+uci_lookup_package(struct uci_context *ctx, const char *name)
+{
+ struct uci_element *e = NULL;
+ if (uci_lookup_next(ctx, &e, &ctx->root, name) == 0)
+ return uci_to_package(e);
+ else
+ return NULL;
+}
+
+/**
+ * uci_lookup_section: look up a section
+ * @ctx: uci context
+ * @p: package that the section belongs to
+ * @name: name of the section
+ */
+static inline struct uci_section *
+uci_lookup_section(struct uci_context *ctx, struct uci_package *p, const char *name)
+{
+ struct uci_element *e = NULL;
+ if (uci_lookup_next(ctx, &e, &p->sections, name) == 0)
+ return uci_to_section(e);
+ else
+ return NULL;
+}
+
+/**
+ * uci_lookup_option: look up an option
+ * @ctx: uci context
+ * @section: section that the option belongs to
+ * @name: name of the option
+ */
+static inline struct uci_option *
+uci_lookup_option(struct uci_context *ctx, struct uci_section *s, const char *name)
+{
+ struct uci_element *e = NULL;
+ if (uci_lookup_next(ctx, &e, &s->options, name) == 0)
+ return uci_to_option(e);
+ else
+ return NULL;
+}
+
+static inline const char *
+uci_lookup_option_string(struct uci_context *ctx, struct uci_section *s, const char *name)
+{
+ struct uci_option *o;
+
+ o = uci_lookup_option(ctx, s, name);
+ if (!o || o->type != UCI_TYPE_STRING)
+ return NULL;
+
+ return o->v.string;
+}
+
+#ifdef __cplusplus
+}
+#endif
+