return true;
}
+static inline bool uci_validate_package(const char *str)
+{
+ return uci_validate_str(str, false);
+}
+
+static inline bool uci_validate_type(const char *str)
+{
+ return uci_validate_str(str, false);
+}
+
static inline bool uci_validate_name(const char *str)
{
return uci_validate_str(str, true);
int uci_parse_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *str)
{
char *last = NULL;
+ char *tmp;
UCI_HANDLE_ERR(ctx);
UCI_ASSERT(ctx, str);
ptr->target = UCI_TYPE_OPTION;
}
+ tmp = strsep(&str, ".");
+ if (tmp)
+ goto error;
+
lastval:
- if (ptr->package && !uci_validate_str(ptr->package, false))
+ if (ptr->package && !uci_validate_package(ptr->package))
goto error;
if (ptr->section && !uci_validate_name(ptr->section))
ptr->flags |= UCI_LOOKUP_EXTENDED;
UCI_ASSERT(ctx, str != NULL);
UCI_ASSERT(ctx, result != NULL);
- if (ctx->pctx) {
- if (ctx->pctx->file != stream) {
- uci_cleanup(ctx);
- }
- } else {
+ if (ctx->pctx && (ctx->pctx->file != stream))
+ uci_cleanup(ctx);
+
+ if (!ctx->pctx)
uci_alloc_parse_context(ctx);
- ctx->pctx->file = stream;
- }
+
+ ctx->pctx->file = stream;
+
if (!*str) {
uci_getln(ctx, 0);
*str = ctx->pctx->buf;