#define UCI_DEBUG_TYPECAST
#endif
+#include <stdbool.h>
#include <setjmp.h>
#include <stdio.h>
* uci_unload: Unload a config file from the uci context
*
* @ctx: uci context
- * @name: name of the config file
+ * @package: pointer to the uci_package struct
*/
-extern int uci_unload(struct uci_context *ctx, const char *name);
+extern int uci_unload(struct uci_context *ctx, struct uci_package *p);
/**
* uci_cleanup: Clean up after an error
*
* @ctx: uci context
* @res: where to store the result
- * @package: config package
+ * @package: uci_package struct
* @section: config section (optional)
* @option: option to search for (optional)
*
* 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, char *package, char *section, char *option);
+extern int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_package *package, char *section, char *option);
+
+/**
+ * uci_set_element_value: Replace an element's value with a new one
+ * @ctx: uci context
+ * @element: pointer to an uci_element struct pointer
+ * @value: new value
+ *
+ * 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);
+
+/**
+ * uci_set: Set an element's value; create the element if necessary
+ * @ctx: uci context
+ * @package: package name
+ * @section: section name
+ * @option: option name
+ * @value: value (option) or type (section)
+ */
+extern int uci_set(struct uci_context *ctx, char *package, char *section, char *option, char *value);
/**
* uci_list_configs: List available uci config files
/* private: */
int errno;
+ const char *func;
jmp_buf trap;
char *buf;
int bufsz;
struct uci_element e;
struct uci_list sections;
struct uci_context *ctx;
+ bool confdir;
+ char *path;
+
/* private: */
int n_section;
+ struct uci_list history;
};
struct uci_section
{
struct uci_list list;
enum uci_command cmd;
- union {
- struct uci_element element;
- struct uci_package package;
- struct uci_section section;
- struct uci_option option;
- } data;
+ char *section;
+ char *option;
+ char *value;
};
/* linked list handling */
&_ptr->list != (_list); \
_ptr = _tmp, _tmp = list_to_element(_ptr->list.next))
-/* returns true if a list is empty */
+/**
+ * uci_list_empty: returns true if a list is empty
+ * @list: list head
+ */
#define uci_list_empty(list) ((list)->next == (list))
/* wrappers for dynamic type handling */