00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "klone_conf.h"
00012 #include <sys/types.h>
00013 #include <stdlib.h>
00014 #include <u/libu.h>
00015 #include <klone/var.h>
00016 #include <klone/utils.h>
00017 #include <klone/varprv.h>
00018
00029 u_string_t *var_get_name_s(var_t *v)
00030 {
00031 dbg_return_if (v == NULL, NULL);
00032
00033 return v->sname;
00034 }
00035
00046 u_string_t *var_get_value_s(var_t *v)
00047 {
00048 dbg_return_if (v == NULL, NULL);
00049
00050 if(v->svalue == NULL)
00051 dbg_err_if(u_string_create(v->data, v->size, &v->svalue));
00052
00053 return v->svalue;
00054 err:
00055 return NULL;
00056 }
00057
00058 void var_set_opaque(var_t *v, void *opaque)
00059 {
00060 v->opaque = opaque;
00061 }
00062
00063 void* var_get_opaque(var_t *v)
00064 {
00065 return v->opaque;
00066 }
00067
00068 int var_bin_create(const char *name, const char *data, size_t size, var_t **pv)
00069 {
00070 var_t *v = NULL;
00071
00072 dbg_return_if (name == NULL, ~0);
00073 dbg_return_if (data == NULL, ~0);
00074 dbg_return_if (pv == NULL, ~0);
00075
00076 v = u_zalloc(sizeof(var_t));
00077 dbg_err_if(v == NULL);
00078
00079 dbg_err_if(u_string_create(name, strlen(name), &v->sname));
00080
00081 dbg_err_if(var_set_bin_value(v, data, size));
00082
00083 *pv = v;
00084
00085 return 0;
00086 err:
00087 if(v)
00088 var_free(v);
00089 return ~0;
00090 }
00091
00092 int var_create(const char* name, const char *value, var_t**pv)
00093 {
00094 dbg_return_if (name == NULL, ~0);
00095 dbg_return_if (value == NULL, ~0);
00096
00097 return var_bin_create(name, value, strlen(value), pv);
00098 }
00099
00100
00101
00102
00103
00104
00105
00106 int var_free(var_t *v)
00107 {
00108 if(v)
00109 {
00110 if(v->sname)
00111 u_string_free(v->sname);
00112
00113 if(v->svalue)
00114 u_string_free(v->svalue);
00115
00116 if(v->opaque)
00117 U_FREE(v->opaque);
00118
00119 U_FREE(v->data);
00120 U_FREE(v);
00121 }
00122
00123 return 0;
00124 }
00125
00136 const char *var_get_name(var_t *v)
00137 {
00138 dbg_return_if (v == NULL, NULL);
00139
00140 return u_string_c(v->sname);
00141 }
00142
00153 const char *var_get_value(var_t *v)
00154 {
00155 dbg_return_if (v == NULL, NULL);
00156
00157 return v->data;
00158 }
00159
00170 size_t var_get_value_size(var_t *v)
00171 {
00172 dbg_return_if (v == NULL, 0);
00173
00174 return v->size;
00175 }
00176
00189 int var_set(var_t *var, const char *name, const char *value)
00190 {
00191 dbg_err_if (var == NULL);
00192 dbg_err_if (name == NULL);
00193 dbg_err_if (value == NULL);
00194
00195 dbg_err_if(var_set_name(var, name));
00196 dbg_err_if(var_set_value(var, value));
00197
00198 return 0;
00199 err:
00200 return ~0;
00201 }
00202
00214 int var_set_name(var_t *v, const char *name)
00215 {
00216 dbg_err_if (v == NULL);
00217 dbg_err_if (name == NULL);
00218
00219 dbg_err_if(u_string_set(v->sname, name, strlen(name)));
00220
00221 return 0;
00222 err:
00223 return ~0;
00224 }
00225
00237 int var_set_value(var_t *v, const char *value)
00238 {
00239 dbg_return_if (v == NULL, ~0);
00240 dbg_return_if (value == NULL, ~0);
00241
00242
00243 return var_set_bin_value(v, value, strlen(value) + 1);
00244 }
00245
00258 int var_set_bin_value(var_t *v, const char *data, size_t size)
00259 {
00260 dbg_err_if (v == NULL);
00261 dbg_err_if (data == NULL);
00262
00263 U_FREE(v->data);
00264
00265 if(data && size)
00266 {
00267 v->size = size;
00268 v->data = u_malloc(size+1);
00269 dbg_err_if(v->data == NULL);
00270
00271 memcpy(v->data, data, size);
00272 v->data[size] = 0;
00273 } else {
00274 v->size = 0;
00275 v->data = NULL;
00276 }
00277
00278 if(v->svalue)
00279 dbg_err_if(u_string_set(v->svalue, v->data, v->size));
00280
00281 return 0;
00282 err:
00283 return ~0;
00284 }