projects
/
idzebra-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Save register type for TERMIDs and snippets.
[idzebra-moved-to-github.git]
/
data1
/
d1_read.c
diff --git
a/data1/d1_read.c
b/data1/d1_read.c
index
f169487
..
91bea6c
100644
(file)
--- a/
data1/d1_read.c
+++ b/
data1/d1_read.c
@@
-1,6
+1,6
@@
-/* $Id: d1_read.c,v 1.13 2004-12-13 20:51:28 adam Exp $
- Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
- Index Data Aps
+/* $Id: d1_read.c,v 1.17 2005-04-28 08:12:28 adam Exp $
+ Copyright (C) 1995-2005
+ Index Data ApS
This file is part of the Zebra server.
This file is part of the Zebra server.
@@
-697,8
+697,7
@@
data1_node *data1_read_nodex (data1_handle dh, NMEM m,
{
data1_xattr *xattr;
{
data1_xattr *xattr;
- char tag[64];
- char args[256];
+ char tag[256];
int null_tag = 0;
int end_tag = 0;
size_t i = 0;
int null_tag = 0;
int end_tag = 0;
size_t i = 0;
@@
-709,6
+708,33
@@
data1_node *data1_read_nodex (data1_handle dh, NMEM m,
end_tag = 1;
c = ampr (get_byte, fh, &);
}
end_tag = 1;
c = ampr (get_byte, fh, &);
}
+ else if (amp == 0 && c == '?')
+ {
+ int quote_mode = 0;
+ while ((c = ampr(get_byte, fh, &)))
+ {
+ if (amp)
+ continue;
+ if (quote_mode == 0)
+ {
+ if (c == '"')
+ quote_mode = c;
+ else if (c == '\'')
+ quote_mode = c;
+ else if (c == '>')
+ {
+ c = ampr(get_byte, fh, &);
+ break;
+ }
+ }
+ else
+ {
+ if (amp == 0 && c == quote_mode)
+ quote_mode = 0;
+ }
+ }
+ continue;
+ }
else if (amp == 0 && c == '!')
{
int c0, amp0;
else if (amp == 0 && c == '!')
{
int c0, amp0;
@@
-776,7
+802,6
@@
data1_node *data1_read_nodex (data1_handle dh, NMEM m,
}
tag[i] = '\0';
xattr = data1_read_xattr (dh, m, get_byte, fh, wrbuf, &c, &);
}
tag[i] = '\0';
xattr = data1_read_xattr (dh, m, get_byte, fh, wrbuf, &c, &);
- args[0] = '\0';
if (amp == 0 && c == '/')
{ /* <tag attrs/> or <tag/> */
null_tag = 1;
if (amp == 0 && c == '/')
{ /* <tag attrs/> or <tag/> */
null_tag = 1;
@@
-829,17
+854,20
@@
data1_node *data1_read_nodex (data1_handle dh, NMEM m,
}
continue;
}
}
continue;
}
- else if (!strcmp(tag, "var"))
+ else if (!strcmp(tag, "var")
+ && xattr && xattr->next && xattr->next->next
+ && xattr->value == 0
+ && xattr->next->value == 0
+ && xattr->next->next->value == 0)
{
{
- char tclass[DATA1_MAX_SYMBOL], type[DATA1_MAX_SYMBOL];
+ /* <var class type value> */
+ const char *tclass = xattr->name;
+ const char *type = xattr->next->name;
+ const char *value = xattr->next->name;
data1_vartype *tp;
data1_vartype *tp;
- int val_offset;
- if (sscanf(args, "%s %s %n", tclass, type, &val_offset) != 2)
- {
- yaz_log(YLOG_WARN, "Malformed variant triple at '%s'", tag);
- continue;
- }
+ yaz_log(YLOG_LOG, "Variant class=%s type=%s value=%s",
+ tclass, type, value);
if (!(tp =
data1_getvartypebyct(dh,
parent->root->u.root.absyn->varset,
if (!(tp =
data1_getvartypebyct(dh,
parent->root->u.root.absyn->varset,
@@
-869,7
+897,7
@@
data1_node *data1_read_nodex (data1_handle dh, NMEM m,
res = data1_mk_node2 (dh, m, DATA1N_variant, parent);
res->u.variant.type = tp;
res->u.variant.value =
res = data1_mk_node2 (dh, m, DATA1N_variant, parent);
res->u.variant.type = tp;
res->u.variant.value =
- data1_insert_string (dh, res, m, args + val_offset);
+ data1_insert_string (dh, res, m, value);
}
}
else
}
}
else
@@
-1108,12
+1136,15
@@
int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
if (yaz_matchstr (tocode, fromcode))
{
WRBUF wrbuf = wrbuf_alloc();
if (yaz_matchstr (tocode, fromcode))
{
WRBUF wrbuf = wrbuf_alloc();
- yaz_iconv_t t = yaz_iconv_open (tocode, fromcode);
+ yaz_iconv_t t = yaz_iconv_open(tocode, fromcode);
if (!t)
if (!t)
+ {
+ wrbuf_free(wrbuf, 1);
return -1;
return -1;
- data1_iconv_s (dh, m, n, t, wrbuf, tocode);
- yaz_iconv_close (t);
- wrbuf_free (wrbuf, 1);
+ }
+ data1_iconv_s(dh, m, n, t, wrbuf, tocode);
+ yaz_iconv_close(t);
+ wrbuf_free(wrbuf, 1);
}
return 0;
}
}
return 0;
}