From 1a388b01f8c85a8a8b987789096d1f9e86b29fdf Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 5 Sep 2008 21:51:46 +0200 Subject: [PATCH] overhaul package and section type validation - makes it easier to read and fixes some bugs in uci changes and uci show without explicit package references --- file.c | 8 ++++---- list.c | 4 ++-- util.c | 12 +++++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/file.c b/file.c index a58ac55..06ba34d 100644 --- a/file.c +++ b/file.c @@ -119,7 +119,7 @@ static void uci_parse_config(struct uci_context *ctx, char **str) *str += strlen(*str) + 1; type = next_arg(ctx, str, true, false); - if (!uci_validate_str(type, false)) + if (!uci_validate_type(type)) uci_parse_error(ctx, type, "invalid character in field"); name = next_arg(ctx, str, false, true); assert_eol(ctx, str); @@ -353,7 +353,7 @@ int uci_import(struct uci_context *ctx, FILE *stream, const char *name, struct u * NB: the config file can still override the package name */ if (name) { - UCI_ASSERT(ctx, uci_validate_str(name, false)); + UCI_ASSERT(ctx, uci_validate_package(name)); pctx->name = name; } @@ -394,7 +394,7 @@ static char *uci_config_path(struct uci_context *ctx, const char *name) { char *filename; - UCI_ASSERT(ctx, uci_validate_str(name, false)); + UCI_ASSERT(ctx, uci_validate_package(name)); filename = uci_malloc(ctx, strlen(name) + strlen(ctx->confdir) + 2); sprintf(filename, "%s/%s", ctx->confdir, name); @@ -520,7 +520,7 @@ static char **uci_list_config_files(struct uci_context *ctx) if (!p) continue; - if (!uci_validate_name(p)) + if (!uci_validate_package(p)) continue; configs[i] = buf; diff --git a/list.c b/list.c index fe2e6ec..b4f4da8 100644 --- a/list.c +++ b/list.c @@ -322,7 +322,7 @@ uci_lookup_ext_section(struct uci_context *ctx, struct uci_ptr *ptr) if (!*name) name = NULL; - else if (!uci_validate_str(name, false)) + else if (!uci_validate_type(name)) goto error; /* if the given index is negative, it specifies the section number from @@ -618,7 +618,7 @@ int uci_set(struct uci_context *ctx, struct uci_ptr *ptr) UCI_ASSERT(ctx, ptr->value); UCI_ASSERT(ctx, ptr->s || (!ptr->option && ptr->section)); if (!ptr->option) { - UCI_ASSERT(ctx, uci_validate_str(ptr->value, false)); + UCI_ASSERT(ctx, uci_validate_type(ptr->value)); } if (!ptr->o && ptr->s && ptr->option) { diff --git a/util.c b/util.c index 177bd14..e56992e 100644 --- a/util.c +++ b/util.c @@ -96,6 +96,16 @@ __plugin bool uci_validate_str(const char *str, bool name) 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); @@ -159,7 +169,7 @@ int uci_parse_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *str) 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; -- 2.11.0