X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=uci.h;h=d7fd1e2f5fbd543919a6fd949f070cff26894e04;hp=d2d8011ccb8301a4a74b4618985bfbc1494da3a1;hb=cac9b1d765338466c1c77719c4119c565689b4c4;hpb=f1ae2ddc4ff16e541c46f595073bf277cd8f778a diff --git a/uci.h b/uci.h index d2d8011..d7fd1e2 100644 --- a/uci.h +++ b/uci.h @@ -146,7 +146,25 @@ extern int uci_unload(struct uci_context *ctx, struct uci_package *p); * If section is omitted, then a pointer to the config package is returned * If option is omitted, then a pointer to the config section is returned */ -extern int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_package *package, char *section, char *option); +extern int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_package *package, const char *section, const char *option); + +/** + * uci_lookup_ext: Extended lookup for an uci element + * + * @ctx: uci context + * @res: where to store the result + * @ptr: uci pointer tuple + * + * Looks up an element using the extended syntax, which is a superset of what + * uci_parse_tuple accepts. It can look up sections by an index with an optional + * type. + * + * Examples: + * network.@interface[0].ifname ('ifname' option of the first interface section) + * network.@interface[-1] (last interface section) + * Note: uci_lookup_ext will automatically load a config package if necessary + */ +extern int uci_lookup_ext(struct uci_context *ctx, struct uci_element **res, char *ptr); /** * uci_add_section: Add an unnamed section @@ -155,7 +173,7 @@ extern int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct * @type: section type * @res: pointer to store a reference to the new section in */ -extern int uci_add_section(struct uci_context *ctx, struct uci_package *p, char *type, struct uci_section **res); +extern int uci_add_section(struct uci_context *ctx, struct uci_package *p, const char *type, struct uci_section **res); /** * uci_set_element_value: Replace an element's value with a new one @@ -166,7 +184,7 @@ extern int uci_add_section(struct uci_context *ctx, struct uci_package *p, char * Only valid for uci_option and uci_section. Will replace the type string * when used with an uci_section */ -extern int uci_set_element_value(struct uci_context *ctx, struct uci_element **element, char *value); +extern int uci_set_element_value(struct uci_context *ctx, struct uci_element **element, const char *value); /** * uci_set: Set an element's value; create the element if necessary @@ -177,7 +195,7 @@ extern int uci_set_element_value(struct uci_context *ctx, struct uci_element **e * @value: value (option) or type (section) * @result: store the updated element in this variable (optional) */ -extern int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char *option, char *value, struct uci_element **result); +extern int uci_set(struct uci_context *ctx, struct uci_package *p, const char *section, const char *option, const char *value, struct uci_element **result); /** * uci_rename: Rename an element @@ -203,7 +221,7 @@ extern int uci_delete_element(struct uci_context *ctx, struct uci_element *e); * @section: section name * @option: option name (optional) */ -extern int uci_delete(struct uci_context *ctx, struct uci_package *p, char *section, char *option); +extern int uci_delete(struct uci_context *ctx, struct uci_package *p, const char *section, const char *option); /** * uci_save: save change history for a package @@ -282,6 +300,15 @@ extern int uci_parse_argument(struct uci_context *ctx, FILE *stream, char **str, */ extern int uci_set_backend(struct uci_context *ctx, const char *name); +/** + * uci_validate_text: validate a value string for uci options + * @str: value + * + * this function checks whether a given string is acceptable as value + * for uci options + */ +extern bool uci_validate_text(const char *str); + /* UCI data structures */ enum uci_type { UCI_TYPE_HISTORY = 0, @@ -292,6 +319,10 @@ enum uci_type { UCI_TYPE_BACKEND = 5, }; +enum uci_option_type { + UCI_TYPE_STRING = 0, +}; + enum uci_flags { UCI_FLAG_STRICT = (1 << 0), /* strict mode for the parser */ UCI_FLAG_PERROR = (1 << 1), /* print parser error messages */ @@ -377,7 +408,11 @@ struct uci_option { struct uci_element e; struct uci_section *section; - char *value; + enum uci_option_type type; + union { + struct uci_element *list; + char *string; + } v; }; enum uci_command {