00001
00002
00003
00004
00005 #ifndef _U_CONFIG_H_
00006 #define _U_CONFIG_H_
00007
00008 #include <stdio.h>
00009 #include <u/libu_conf.h>
00010
00011 #ifdef __cplusplus
00012 extern "C" {
00013 #endif
00014
00015
00016 struct u_config_s;
00017
00024 typedef struct u_config_s u_config_t;
00025
00027 struct u_config_driver_s
00028 {
00029 int (*open) (const char *uri, void **parg);
00041 int (*close) (void *arg);
00050 char *(*gets) (void *arg, char *buf, size_t size);
00067 int (*resolv) (const char *name, char *uri, size_t uri_bufsz);
00080 };
00081
00083 typedef struct u_config_driver_s u_config_driver_t;
00084
00086 typedef enum {
00087 U_CONFIG_WALK_PREORDER,
00088 U_CONFIG_WALK_POSTORDER
00089 } u_config_walk_t;
00090
00095 int u_config_create(u_config_t **pc);
00096 int u_config_free(u_config_t *c);
00097 int u_config_load(u_config_t *c, int fd, int overwrite);
00098
00099 int u_config_load_from_file (const char *file, u_config_t **pc);
00100
00101 int u_config_load_from_drv(const char *uri, u_config_driver_t *drv,
00102 int overwrite, u_config_t **pc);
00103
00104 typedef char* (*u_config_gets_t)(void *arg, char *buf, size_t size);
00105 int u_config_load_from(u_config_t *c, u_config_gets_t cb,
00106 void *arg, int overwrite);
00107
00108 const char* u_config_get_key(u_config_t *c);
00109 const char* u_config_get_value(u_config_t *c);
00110
00111 int u_config_get_subkey(u_config_t *c, const char *subkey, u_config_t **pc);
00112 int u_config_get_subkey_nth(u_config_t *c,const char *subkey, int n,
00113 u_config_t **pc);
00114
00115 const char* u_config_get_subkey_value(u_config_t *c, const char *subkey);
00116
00117 int u_config_get_subkey_value_b(u_config_t *c, const char *subkey, int def,
00118 int *out);
00119 int u_config_get_subkey_value_i(u_config_t *c, const char *subkey, int def,
00120 int *out);
00121
00122 int u_config_add_key(u_config_t *c, const char *key, const char *val);
00123 int u_config_set_key(u_config_t *c, const char *key, const char *val);
00124
00125 int u_config_add_child(u_config_t *c, const char *key, u_config_t **pc);
00126 int u_config_set_value(u_config_t *c, const char *val);
00127 u_config_t* u_config_get_child_n(u_config_t *c, const char *key, int n);
00128 u_config_t* u_config_get_child(u_config_t *c, const char *key);
00129 int u_config_del_child(u_config_t *c, u_config_t *child);
00130
00131 int u_config_has_children(u_config_t *c);
00132 int u_config_save_to_buf(u_config_t *c, char *buf, size_t size);
00133 int u_config_load_from_buf(char *buf, size_t len, u_config_t **pc);
00134
00135 void u_config_print_to_fp(u_config_t *c, FILE *fp, int lev);
00136 void u_config_print(u_config_t *c, int lev);
00137
00138 int u_config_sort_children(u_config_t *c, int(*)(u_config_t**, u_config_t**));
00139 void u_config_walk (u_config_t *c, u_config_walk_t s, void (*cb)(u_config_t *));
00140
00141 #ifdef __cplusplus
00142 }
00143 #endif
00144
00145 #endif