43 log_debug(
ZONE,
"created new xd; title=%s, instructions=%s", title, instructions);
52 assert((
int) (xd != NULL));
54 assert((
int) (var != NULL));
76 assert((
int) (xd != NULL));
87 assert((
int) (xd != NULL));
88 assert((
int) (xdf != NULL));
99 assert((
int) (xd != NULL));
100 assert((
int) (xdf != NULL));
111 assert((
int) (xdi != NULL));
112 assert((
int) (xdf != NULL));
124 assert((
int) (xd != NULL));
125 assert((
int) (xdi != NULL));
127 if(xd->
items == NULL)
139 assert((
int) (xdf != NULL));
140 assert((
int) (value != NULL));
146 if(lvalue <= 0) lvalue = strlen(value);
150 if(llabel <= 0) llabel = strlen(label);
163 assert((
int) (xdf != NULL));
164 assert((
int) (value != NULL));
166 if(vlen <= 0) vlen = strlen(value);
182 int attr, elem, eval;
211 else if(
NAD_AVAL_L(nad, attr) == 9 && strncmp(
"jid-multi",
NAD_AVAL(nad, attr), 9) == 0)
213 else if(
NAD_AVAL_L(nad, attr) == 10 && strncmp(
"jid-single",
NAD_AVAL(nad, attr), 10) == 0)
215 else if(
NAD_AVAL_L(nad, attr) == 10 && strncmp(
"list-multi",
NAD_AVAL(nad, attr), 10) == 0)
217 else if(
NAD_AVAL_L(nad, attr) == 11 && strncmp(
"list-single",
NAD_AVAL(nad, attr), 11) == 0)
219 else if(
NAD_AVAL_L(nad, attr) == 10 && strncmp(
"text-multi",
NAD_AVAL(nad, attr), 10) == 0)
221 else if(
NAD_AVAL_L(nad, attr) == 12 && strncmp(
"text-private",
NAD_AVAL(nad, attr), 12) == 0)
223 else if(
NAD_AVAL_L(nad, attr) == 11 && strncmp(
"text-single",
NAD_AVAL(nad, attr), 11) == 0)
271 int atype, elem, field;
274 assert((
int) (nad != NULL));
275 assert((
int) (root >= 0));
280 log_debug(
ZONE,
"elem %d does not exist, or is not {x:data}x", root);
#define NAD_CDATA_L(N, E)
int nad_find_elem(nad_t nad, int elem, int ns, const char *name, int depth)
locate the next elem at a given depth with an optional matching name
void xdata_add_value(xdata_field_t xdf, const char *value, int vlen)
value insertion
void pool_cleanup(pool_t p, pool_cleanup_t f, void *arg)
public cleanup utils, insert in a way that they are run FIFO, before mem frees
xdata_t xdata_new(xdata_type_t type, const char *title, const char *instructions)
creation
void * pmalloco(pool_t p, int size)
easy safety utility (for creating blank mem for structs, etc)
#define NAD_ENAME_L(N, E)
char * pstrdupx(pool_t p, const char *src, int len)
use given size
#define NAD_NURI_L(N, NS)
xdata_item_t xdata_item_new(xdata_t xd)
new item
void xdata_add_rfield(xdata_t xd, xdata_field_t xdf)
xdata_field_t xdata_field_new(xdata_t xd, xdata_field_type_t type, const char *var, const char *label, const char *desc, int required)
new field
static xdata_field_t _xdata_field_parse(xdata_t xd, nad_t nad, int root)
rip out a field
void xdata_add_field(xdata_t xd, xdata_field_t xdf)
field insertion
static void xdata_option_new(xdata_field_t xdf, const char *value, int lvalue, const char *label, int llabel)
option insertion
char * pstrdup(pool_t p, const char *src)
XXX efficient: move this to const char * and then loop throug the existing heaps to see if src is wit...
xdata_t xdata_parse(nad_t nad, int root)
parse a nad and build
int nad_find_attr(nad_t nad, int elem, int ns, const char *name, const char *val)
get a matching attr on this elem, both name and optional val
pool - base node for a pool.
void xdata_add_item(xdata_t xd, xdata_item_t xdi)
item insertion
void xdata_add_field_item(xdata_item_t xdi, xdata_field_t xdf)