X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=uci.h;h=be816fd95ca5cc64578c0a2521a8a223bb87c833;hp=4855170c200334bbc6323953f20ac2d861978709;hb=a01f4012088e4e21af8084d744df3b6d474f898e;hpb=c90d9cb8ba073d1c98e61591303aa96300750940 diff --git a/uci.h b/uci.h index 4855170..be816fd 100644 --- a/uci.h +++ b/uci.h @@ -15,6 +15,8 @@ #ifndef __LIBUCI_H #define __LIBUCI_H +#include "uci_config.h" + /* * you can use these defines to enable debugging behavior for * apps compiled against libuci: @@ -24,18 +26,14 @@ * */ -#ifdef DEBUG_ALL -#define UCI_DEBUG -#define UCI_DEBUG_TYPECAST -#endif - #include #include #include #define UCI_CONFDIR "/etc/config" #define UCI_SAVEDIR "/tmp/.uci" -#define UCI_FILEMODE 0600 +#define UCI_DIRMODE 0700 +#define UCI_FILEMODE 0600 enum { @@ -148,7 +146,7 @@ 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_add_section: Add an unnamed section @@ -264,7 +262,7 @@ extern int uci_add_history_path(struct uci_context *ctx, const char *dir); * @section: section name (optional) * @option option name (optional) */ -extern int uci_revert(struct uci_context *ctx, struct uci_package **p, char *section, char *option); +extern int uci_revert(struct uci_context *ctx, struct uci_package **p, const char *section, const char *option); /** * uci_parse_argument: parse a shell-style argument, with an arbitrary quoting style @@ -275,6 +273,15 @@ extern int uci_revert(struct uci_context *ctx, struct uci_package **p, char *sec */ extern int uci_parse_argument(struct uci_context *ctx, FILE *stream, char **str, char **result); +/** + * uci_set_backend: change the default backend + * @ctx: uci context + * @name: name of the backend + * + * The default backend is "file", which uses /etc/config for config storage + */ +extern int uci_set_backend(struct uci_context *ctx, const char *name); + /* UCI data structures */ enum uci_type { UCI_TYPE_HISTORY = 0, @@ -305,6 +312,10 @@ struct uci_backend char **(*list_configs)(struct uci_context *ctx); struct uci_package *(*load)(struct uci_context *ctx, const char *name); void (*commit)(struct uci_context *ctx, struct uci_package **p, bool overwrite); + + /* private: */ + const void *ptr; + void *priv; }; struct uci_context @@ -329,7 +340,7 @@ struct uci_context struct uci_list history_path; /* private: */ - int errno; + int err; const char *func; jmp_buf trap; bool internal; @@ -384,17 +395,6 @@ struct uci_history char *value; }; -#define UCI_BACKEND(_var, _name, ...) \ -struct uci_backend _var = { \ - .e.list = { \ - .next = &_var.e.list, \ - .prev = &_var.e.list, \ - }, \ - .e.name = _name, \ - .e.type = UCI_TYPE_BACKEND, \ - __VA_ARGS__ \ -} - /* linked list handling */ #ifndef offsetof