X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Frecord_render.c;h=983667ae21d06582d5a49aedaf9e68f352bc8ac1;hp=ba5311e81bb71a8fa72622de97a034f768a61621;hb=95a76bd311b56586f2f3e9bb6e2e2a6c3f2dbce4;hpb=b55bad569eb7255378533de9f46ced29c4a9d281 diff --git a/src/record_render.c b/src/record_render.c index ba5311e..983667a 100644 --- a/src/record_render.c +++ b/src/record_render.c @@ -252,16 +252,15 @@ static int replace_node(NMEM nmem, xmlNode *ptr, if (res) { xmlDoc *doc = xmlParseMemory(res, strlen(res)); - xmlNode *nptr; if (doc) { - nptr = xmlCopyNode(xmlDocGetRootElement(doc), 1); + xmlNode *nptr = xmlCopyNode(xmlDocGetRootElement(doc), 1); xmlReplaceNode(ptr, nptr); xmlFreeDoc(doc); } else { - nptr = xmlNewText(BAD_CAST res); + xmlNode *nptr = xmlNewText(BAD_CAST res); xmlReplaceNode(ptr, nptr); } ret = 0; @@ -342,7 +341,6 @@ const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema, const char *ret = 0; NMEM nmem = 0; char *base64_xpath = 0; - char *base64_type_spec = 0; size_t i; char type[40]; char charset[40]; @@ -386,34 +384,17 @@ const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema, } format[j] = '\0'; } - else if (!strncmp(cp + i, "base64", 6)) + else if (!strncmp(cp + i, "base64=", 7)) { - i = i + 6; + size_t i0; + i = i + 7; - while (cp[i] == ' ') - i++; - if (cp[i] == '(') - { - size_t i0; - nmem = nmem_create(); + i0 = i; + while (cp[i] && cp[i] != ';') i++; - while (cp[i] == ' ') - i++; - i0 = i; - while (cp[i] != ',' && cp[i]) - i++; - base64_xpath = nmem_strdupn(nmem, cp + i0, i - i0); - if (cp[i]) - i++; - while (cp[i] == ' ') - i++; - i0 = i; - while (cp[i] != ')' && cp[i]) - i++; - base64_type_spec = nmem_strdupn(nmem, cp + i0, i - i0); - if (cp[i]) - i++; - } + + nmem = nmem_create(); + base64_xpath = nmem_strdupn(nmem, cp + i0, i - i0); } } if (!strcmp(type, "database")) @@ -476,8 +457,17 @@ const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema, } if (base64_xpath) - ret = base64_render(nmem, wrbuf, - ret, len, base64_xpath, base64_type_spec); + { + char *type_spec = nmem_malloc(nmem, + strlen(format) + strlen(charset) + 11); + strcpy(type_spec, type); + if (*charset) + { + strcat(type_spec, "; charset="); + strcat(type_spec, charset); + } + ret = base64_render(nmem, wrbuf, ret, len, base64_xpath, type_spec); + } nmem_destroy(nmem); return ret; }