-/* $Id: d1_read.c,v 1.21 2006-08-14 10:40:06 adam Exp $
- Copyright (C) 1995-2006
+/* $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.
{
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;
}