-/* $Id: d1_read.c,v 1.19 2006-06-13 12:02:02 adam Exp $
- Copyright (C) 1995-2005
+/* $Id: d1_read.c,v 1.25 2007-04-16 08:44:31 adam Exp $
+ Copyright (C) 1995-2007
Index Data ApS
This file is part of the Zebra server.
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra. If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
*/
{
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)
{
data1_node *r = (data1_node *)nmem_malloc(m, sizeof(*r));
r->next = r->child = r->last_child = 0;
- r->destroy = 0;
if (!parent)
r->root = r;
return r;
}
-void data1_free_tree (data1_handle dh, data1_node *t)
-{
- data1_node *p = t->child, *pn;
-
- while (p)
- {
- pn = p->next;
- data1_free_tree (dh, p);
- p = pn;
- }
- if (t->destroy)
- (*t->destroy)(t);
-}
-
data1_node *data1_mk_root (data1_handle dh, NMEM nmem, const char *name)
{
data1_absyn *absyn = data1_get_absyn(dh, name, 1);
data1_node *res;
+
if (!absyn)
{
yaz_log(YLOG_WARN, "Unable to acquire abstract syntax " "for '%s'",
for (;;)
{
data1_xattr *p;
- int len;
while (*amp || (c && d1_isspace(c)))
c = ampr (get_byte, fh, amp);
if (*amp == 0 && (c == 0 || c == '>' || c == '/'))
wrbuf_putc (wrbuf, c);
c = ampr (get_byte, fh, amp);
}
- wrbuf_putc (wrbuf, '\0');
- len = wrbuf_len(wrbuf);
- p->name = (char*) nmem_malloc (m, len);
- strcpy (p->name, wrbuf_buf(wrbuf));
+ p->name = nmem_strdup (m, wrbuf_cstr(wrbuf));
if (c == '=')
{
c = ampr (get_byte, fh, amp);
c = ampr (get_byte, fh, amp);
}
}
- wrbuf_putc (wrbuf, '\0');
- len = wrbuf_len(wrbuf);
- p->value = (char*) nmem_malloc (m, len);
- strcpy (p->value, wrbuf_buf(wrbuf));
+ p->value = nmem_strdup(m, wrbuf_cstr(wrbuf));
}
}
*ch = c;
data1_node *node;
node = data1_read_nodex(dh, m, getc_mem, (void *) (buf), wrbuf);
- wrbuf_free (wrbuf, 1);
+ wrbuf_destroy(wrbuf);
return node;
}
{
char *outbuf = wrbuf->buf + wrbuf->pos;
size_t outlen = wrbuf->size - wrbuf->pos;
- if (yaz_iconv (t, &inbuf, &inlen, &outbuf, &outlen) ==
+ if (yaz_iconv(t, &inbuf, &inlen, &outbuf, &outlen) ==
(size_t)(-1) && yaz_iconv_error(t) != YAZ_ICONV_E2BIG)
{
/* bad data. stop and skip conversion entirely */
return -1;
}
else if (inlen == 0)
- { /* finished converting */
+ { /* finished converting, flush it */
+ yaz_iconv(t, 0, 0, &outbuf, &outlen);
wrbuf->pos = wrbuf->size - outlen;
break;
}
conv_item(m, t, wrbuf, p->value, strlen(p->value))
== 0)
{
- wrbuf_puts (wrbuf, "");
- p->value = nmem_strdup (m, wrbuf->buf);
+ p->value = nmem_strdup(m, wrbuf_cstr(wrbuf));
}
}
}
yaz_iconv_t t = yaz_iconv_open(tocode, fromcode);
if (!t)
{
- wrbuf_free(wrbuf, 1);
+ wrbuf_destroy(wrbuf);
return -1;
}
data1_iconv_s(dh, m, n, t, wrbuf, tocode);
yaz_iconv_close(t);
- wrbuf_free(wrbuf, 1);
+ wrbuf_destroy(wrbuf);
}
return 0;
}