X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=data1%2Fd1_read.c;h=742e170c0c2bafb2946fe5f04157533c2d5b8b7c;hb=cc4289d73c2b872c09d221d5e1188d3cdd9da438;hp=09d7c52aa54b29a6aac68fdbb3dbab0876d66876;hpb=804cbe110c2f61627074d7f495f7d97d086105ff;p=idzebra-moved-to-github.git diff --git a/data1/d1_read.c b/data1/d1_read.c index 09d7c52..742e170 100644 --- a/data1/d1_read.c +++ b/data1/d1_read.c @@ -1,5 +1,5 @@ -/* $Id: d1_read.c,v 1.4 2003-05-05 20:13:29 adam Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 +/* $Id: d1_read.c,v 1.9 2004-08-04 08:35:22 adam Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps This file is part of the Zebra server. @@ -128,13 +128,13 @@ data1_node *data1_append_node (data1_handle dh, NMEM m, int type, data1_node *r = (data1_node *)nmem_malloc(m, sizeof(*r)); r->next = r->child = r->last_child = 0; r->destroy = 0; - + + r->parent = parent; if (!parent) r->root = r; else { r->root = parent->root; - r->parent = parent; if (!parent->child) parent->child = parent->last_child = r; else @@ -213,6 +213,24 @@ void data1_set_root(data1_handle dh, data1_node *res, res->u.root.absyn = absyn; } +void data1_add_attrs(data1_handle dh, NMEM nmem, const char **attr, + data1_xattr **p) +{ + while (*p) + p = &(*p)->next; + + while (attr && *attr) + { + *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p)); + (*p)->name = nmem_strdup (nmem, *attr++); + (*p)->value = nmem_strdup (nmem, *attr++); + (*p)->what = DATA1I_text; + + p = &(*p)->next; + } + *p = 0; +} + data1_node *data1_mk_preprocess (data1_handle dh, NMEM nmem, const char *target, const char **attr, data1_node *at) @@ -225,22 +243,31 @@ data1_node *data1_mk_preprocess_n (data1_handle dh, NMEM nmem, const char *target, size_t len, const char **attr, data1_node *at) { - data1_xattr **p; data1_node *res = data1_mk_node2 (dh, nmem, DATA1N_preprocess, at); res->u.preprocess.target = data1_insert_string_n (dh, res, nmem, target, len); - p = &res->u.preprocess.attributes; - while (attr && *attr) - { - *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p)); - (*p)->name = nmem_strdup (nmem, *attr++); - (*p)->value = nmem_strdup (nmem, *attr++); - (*p)->what = DATA1I_text; + data1_add_attrs(dh, nmem, attr, &res->u.preprocess.attributes); + return res; +} - p = &(*p)->next; - } - *p = 0; +data1_node *data1_insert_preprocess (data1_handle dh, NMEM nmem, + const char *target, + const char **attr, data1_node *at) +{ + return data1_insert_preprocess_n (dh, nmem, target, strlen(target), + attr, at); +} + +data1_node *data1_insert_preprocess_n (data1_handle dh, NMEM nmem, + const char *target, size_t len, + const char **attr, data1_node *at) +{ + data1_node *res = data1_insert_node (dh, nmem, DATA1N_preprocess, at); + res->u.preprocess.target = data1_insert_string_n (dh, res, nmem, + target, len); + + data1_add_attrs(dh, nmem, attr, &res->u.preprocess.attributes); return res; } @@ -250,7 +277,6 @@ data1_node *data1_mk_tag_n (data1_handle dh, NMEM nmem, { data1_node *partag = get_parent_tag(dh, at); data1_node *res = data1_mk_node2 (dh, nmem, DATA1N_tag, at); - data1_xattr **p; data1_element *e = 0; res->u.tag.tag = data1_insert_string_n (dh, res, nmem, tag, len); @@ -268,40 +294,17 @@ data1_node *data1_mk_tag_n (data1_handle dh, NMEM nmem, e, res->u.tag.tag); } res->u.tag.element = e; - p = &res->u.tag.attributes; - while (attr && *attr) - { - *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p)); - (*p)->name = nmem_strdup (nmem, *attr++); - (*p)->value = nmem_strdup (nmem, *attr++); - (*p)->what = DATA1I_text; - p = &(*p)->next; - } - *p = 0; + data1_add_attrs(dh, nmem, attr, &res->u.tag.attributes); return res; } void data1_tag_add_attr (data1_handle dh, NMEM nmem, data1_node *res, const char **attr) { - data1_xattr **p; - if (res->which != DATA1N_tag) return; - p = &res->u.tag.attributes; - while (*p) - p = &(*p)->next; - - while (attr && *attr) - { - *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p)); - (*p)->name = nmem_strdup (nmem, *attr++); - (*p)->value = nmem_strdup (nmem, *attr++); - (*p)->what = DATA1I_text; - p = &(*p)->next; - } - *p = 0; + data1_add_attrs(dh, nmem, attr, &res->u.tag.attributes); } data1_node *data1_mk_tag (data1_handle dh, NMEM nmem, @@ -467,8 +470,8 @@ data1_node *data1_add_taggeddata (data1_handle dh, data1_node *root, return data1_add_insert_taggeddata (dh, at, tagname, m, 1, 0); } -data1_node *data1_mk_tag_data_int (data1_handle dh, data1_node *at, - const char *tag, int num, +data1_node *data1_mk_tag_data_zint (data1_handle dh, data1_node *at, + const char *tag, zint num, NMEM nmem) { data1_node *node_data; @@ -478,11 +481,18 @@ data1_node *data1_mk_tag_data_int (data1_handle dh, data1_node *at, return 0; node_data->u.data.what = DATA1I_num; node_data->u.data.data = node_data->lbuf; - sprintf (node_data->u.data.data, "%d", num); + sprintf (node_data->u.data.data, ZINT_FORMAT, num); node_data->u.data.len = strlen (node_data->u.data.data); return node_data; } +data1_node *data1_mk_tag_data_int (data1_handle dh, data1_node *at, + const char *tag, int num, + NMEM nmem) +{ + return data1_mk_tag_data_zint(dh, at, tag, num, nmem); +} + data1_node *data1_mk_tag_data_oid (data1_handle dh, data1_node *at, const char *tag, Odr_oid *oid, NMEM nmem) @@ -1132,6 +1142,9 @@ void data1_concat_text(data1_handle dh, NMEM m, data1_node *n) n->u.data.data = ndata; n->u.data.len = sz; n->next = np; + if (!np && n->parent) + n->parent->last_child = n; + } data1_concat_text(dh, m, n->child); }