projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Document s=ag
[yaz-moved-to-github.git]
/
src
/
record_render.c
diff --git
a/src/record_render.c
b/src/record_render.c
index
69a208b
..
37fc9f5
100644
(file)
--- a/
src/record_render.c
+++ b/
src/record_render.c
@@
-34,7
+34,7
@@
static yaz_iconv_t iconv_create_charset(const char *record_charset,
yaz_iconv_t cd = 0;
char *from_set1 = 0;
char *from_set2 = 0;
yaz_iconv_t cd = 0;
char *from_set1 = 0;
char *from_set2 = 0;
- char *to_set = 0;
+ char *to_set = "utf-8";
if (record_charset && *record_charset)
{
char *cp = charset_buf;
if (record_charset && *record_charset)
{
char *cp = charset_buf;
@@
-62,11
+62,11
@@
static yaz_iconv_t iconv_create_charset(const char *record_charset,
}
if (from_set1)
}
if (from_set1)
- cd = yaz_iconv_open(to_set ? to_set : "UTF-8", from_set1);
+ cd = yaz_iconv_open(to_set, from_set1);
if (cd2)
{
if (from_set2)
if (cd2)
{
if (from_set2)
- *cd2 = yaz_iconv_open(to_set ? to_set : "UTF-8", from_set2);
+ *cd2 = yaz_iconv_open(to_set, from_set2);
else
*cd2 = 0;
}
else
*cd2 = 0;
}
@@
-88,8
+88,7
@@
static const char *return_marc_record(WRBUF wrbuf,
yaz_marc_xml(mt, marc_type);
if (yaz_marc_decode_wrbuf(mt, buf, sz, wrbuf) > 0)
{
yaz_marc_xml(mt, marc_type);
if (yaz_marc_decode_wrbuf(mt, buf, sz, wrbuf) > 0)
{
- if (len)
- *len = wrbuf_len(wrbuf);
+ *len = wrbuf_len(wrbuf);
ret_string = wrbuf_cstr(wrbuf);
}
yaz_marc_destroy(mt);
ret_string = wrbuf_cstr(wrbuf);
}
yaz_marc_destroy(mt);
@@
-123,8
+122,7
@@
static const char *return_opac_record(WRBUF wrbuf,
yaz_iconv_close(cd);
if (cd2)
yaz_iconv_close(cd2);
yaz_iconv_close(cd);
if (cd2)
yaz_iconv_close(cd2);
- if (len)
- *len = wrbuf_len(wrbuf);
+ *len = wrbuf_len(wrbuf);
return wrbuf_cstr(wrbuf);
}
return wrbuf_cstr(wrbuf);
}
@@
-144,8
+142,7
@@
static const char *return_string_record(WRBUF wrbuf,
sz = wrbuf_len(wrbuf);
yaz_iconv_close(cd);
}
sz = wrbuf_len(wrbuf);
yaz_iconv_close(cd);
}
- if (len)
- *len = sz;
+ *len = sz;
return buf;
}
return buf;
}
@@
-206,7
+203,7
@@
static const char *get_record_format(WRBUF wrbuf, int *len,
{
const char *res = return_record_wrbuf(wrbuf, len, npr, marctype, charset);
#if YAZ_HAVE_XML2
{
const char *res = return_record_wrbuf(wrbuf, len, npr, marctype, charset);
#if YAZ_HAVE_XML2
- if (*format == '1' && len)
+ if (*format == '1')
{
/* try to XML format res */
xmlDocPtr doc;
{
/* try to XML format res */
xmlDocPtr doc;
@@
-276,7
+273,7
@@
static const char *base64_render(NMEM nmem, WRBUF wrbuf,
const char *expr, const char *type_spec)
{
#if YAZ_HAVE_XML2
const char *expr, const char *type_spec)
{
#if YAZ_HAVE_XML2
- xmlDocPtr doc = xmlParseMemory(buf, strlen(buf));
+ xmlDocPtr doc = xmlParseMemory(buf, *len);
if (doc)
{
xmlChar *buf_out;
if (doc)
{
xmlChar *buf_out;
@@
-325,8
+322,7
@@
static const char *base64_render(NMEM nmem, WRBUF wrbuf,
wrbuf_rewind(wrbuf);
wrbuf_write(wrbuf, (const char *) buf_out, len_out);
buf = wrbuf_cstr(wrbuf);
wrbuf_rewind(wrbuf);
wrbuf_write(wrbuf, (const char *) buf_out, len_out);
buf = wrbuf_cstr(wrbuf);
- if (len)
- *len = len_out;
+ *len = len_out;
}
xmlFreeDoc(doc);
xmlFree(buf_out);
}
xmlFreeDoc(doc);
xmlFree(buf_out);
@@
-347,6
+343,10
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
char charset[40];
char format[3];
const char *cp = type_spec;
char charset[40];
char format[3];
const char *cp = type_spec;
+ int len0;
+
+ if (!len)
+ len = &len0;
for (i = 0; cp[i] && cp[i] != ';' && cp[i] != ' ' && i < sizeof(type)-1;
i++)
for (i = 0; cp[i] && cp[i] != ';' && cp[i] != ' ' && i < sizeof(type)-1;
i++)
@@
-367,6
+367,8
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
{
size_t j = 0;
i = i + 8; /* skip charset= */
{
size_t j = 0;
i = i + 8; /* skip charset= */
+ while (cp[i] == ' ')
+ i++;
for (j = 0; cp[i] && cp[i] != ';' && cp[i] != ' '; i++)
{
if (j < sizeof(charset)-1)
for (j = 0; cp[i] && cp[i] != ';' && cp[i] != ' '; i++)
{
if (j < sizeof(charset)-1)
@@
-378,6
+380,8
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
{
size_t j = 0;
i = i + 7;
{
size_t j = 0;
i = i + 7;
+ while (cp[i] == ' ')
+ i++;
for (j = 0; cp[i] && cp[i] != ';' && cp[i] != ' '; i++)
{
if (j < sizeof(format)-1)
for (j = 0; cp[i] && cp[i] != ';' && cp[i] != ' '; i++)
{
if (j < sizeof(format)-1)
@@
-389,7
+393,8
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
{
size_t i0;
i = i + 7;
{
size_t i0;
i = i + 7;
-
+ while (cp[i] == ' ')
+ i++;
i0 = i;
while (cp[i] && cp[i] != ';')
i++;
i0 = i;
while (cp[i] && cp[i] != ';')
i++;
@@
-400,14
+405,12
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
}
if (!strcmp(type, "database"))
{
}
if (!strcmp(type, "database"))
{
- if (len)
- *len = (npr->databaseName ? strlen(npr->databaseName) : 0);
+ *len = (npr->databaseName ? strlen(npr->databaseName) : 0);
ret = npr->databaseName;
}
else if (!strcmp(type, "schema"))
{
ret = npr->databaseName;
}
else if (!strcmp(type, "schema"))
{
- if (len)
- *len = schema ? strlen(schema) : 0;
+ *len = schema ? strlen(schema) : 0;
ret = schema;
}
else if (!strcmp(type, "syntax"))
ret = schema;
}
else if (!strcmp(type, "syntax"))
@@
-420,8
+423,7
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
}
if (!desc)
desc = "none";
}
if (!desc)
desc = "none";
- if (len)
- *len = strlen(desc);
+ *len = strlen(desc);
ret = desc;
}
if (npr->which != Z_NamePlusRecord_databaseRecord)
ret = desc;
}
if (npr->which != Z_NamePlusRecord_databaseRecord)
@@
-447,7
+449,7
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
}
else if (!strcmp(type, "ext"))
{
}
else if (!strcmp(type, "ext"))
{
- if (len) *len = -1;
+ *len = -1;
ret = (const char *) npr->u.databaseRecord;
}
else if (!strcmp(type, "opac"))
ret = (const char *) npr->u.databaseRecord;
}
else if (!strcmp(type, "opac"))
@@
-457,10
+459,10
@@
const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema,
format);
}
format);
}
- if (base64_xpath)
+ if (base64_xpath && *len != -1)
{
char *type_spec = nmem_malloc(nmem,
{
char *type_spec = nmem_malloc(nmem,
- strlen(format) + strlen(charset) + 11);
+ strlen(type) + strlen(charset) + 11);
strcpy(type_spec, type);
if (*charset)
{
strcpy(type_spec, type);
if (*charset)
{