44 log_debug(
ZONE,
"created new xd; title=%s, instructions=%s", title, instructions);
53 assert((
int) (xd != NULL));
55 assert((
int) (var != NULL));
77 assert((
int) (xd != NULL));
88 assert((
int) (xd != NULL));
89 assert((
int) (xdf != NULL));
100 assert((
int) (xd != NULL));
101 assert((
int) (xdf != NULL));
112 assert((
int) (xdi != NULL));
113 assert((
int) (xdf != NULL));
125 assert((
int) (xd != NULL));
126 assert((
int) (xdi != NULL));
128 if(xd->
items == NULL)
140 assert((
int) (xdf != NULL));
141 assert((
int) (value != NULL));
147 if(lvalue <= 0) lvalue = strlen(value);
151 if(llabel <= 0) llabel = strlen(label);
164 assert((
int) (xdf != NULL));
165 assert((
int) (value != NULL));
167 if(vlen <= 0) vlen = strlen(value);
183 int attr, elem, eval;
212 else if(
NAD_AVAL_L(nad, attr) == 9 && strncmp(
"jid-multi",
NAD_AVAL(nad, attr), 9) == 0)
214 else if(
NAD_AVAL_L(nad, attr) == 10 && strncmp(
"jid-single",
NAD_AVAL(nad, attr), 10) == 0)
216 else if(
NAD_AVAL_L(nad, attr) == 10 && strncmp(
"list-multi",
NAD_AVAL(nad, attr), 10) == 0)
218 else if(
NAD_AVAL_L(nad, attr) == 11 && strncmp(
"list-single",
NAD_AVAL(nad, attr), 11) == 0)
220 else if(
NAD_AVAL_L(nad, attr) == 10 && strncmp(
"text-multi",
NAD_AVAL(nad, attr), 10) == 0)
222 else if(
NAD_AVAL_L(nad, attr) == 12 && strncmp(
"text-private",
NAD_AVAL(nad, attr), 12) == 0)
224 else if(
NAD_AVAL_L(nad, attr) == 11 && strncmp(
"text-single",
NAD_AVAL(nad, attr), 11) == 0)
272 int atype, elem, field;
275 assert((
int) (nad != NULL));
276 assert((
int) (root >= 0));
280 if(root >= nad->
ecur ||
NAD_NURI_L(nad,
NAD_ENS(nad, root)) != strlen(
uri_XDATA) || strncmp(
uri_XDATA,
NAD_NURI(nad,
NAD_ENS(nad, root)),
NAD_NURI_L(nad,
NAD_ENS(nad, root))) ||
NAD_ENAME_L(nad, root) != 1 || (
NAD_ENAME(nad, root))[0] !=
'x') {
281 log_debug(
ZONE,
"elem %d does not exist, or is not {x:data}x", root);
#define NAD_CDATA_L(N, E)
int nad_find_attr(nad_t nad, unsigned int elem, int ns, const char *name, const char *val)
get a matching attr on this elem, both name and optional val
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
int nad_find_elem(nad_t nad, unsigned int elem, int ns, const char *name, int depth)
locate the next elem at a given depth with an optional matching name
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
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)