includeconvert.c revision 38ae7e4efe803ea78b6499cd05a394db32623e41
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync<![CDATA[
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync#include <string.h>
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync#include <libxml/parser.h>
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsyncunsigned char*
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsyncconvert (unsigned char *in, char *encoding)
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync{
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync unsigned char *out;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync int ret,size,out_size,temp;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync xmlCharEncodingHandlerPtr handler;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync size = (int)strlen(in)+1;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync out_size = size*2-1;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync out = malloc((size_t)out_size);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync if (out) {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync handler = xmlFindCharEncodingHandler(encoding);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync if (!handler) {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync free(out);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync out = NULL;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync }
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync }
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync if (out) {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync temp=size-1;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync ret = handler->input(out, &out_size, in, &temp);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync if (ret || temp-size+1) {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync if (ret) {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync printf("conversion wasn't successful.\n");
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync } else {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync printf("conversion wasn't successful. converted: %i octets.\n",temp);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync }
c299849be8ae3544715e8806e1433cae67d93e2evboxsync free(out);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync out = NULL;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync } else {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync out = realloc(out,out_size+1);
c299849be8ae3544715e8806e1433cae67d93e2evboxsync out[out_size]=0; /*null terminating out*/
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync }
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync } else {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync printf("no mem\n");
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync }
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync return (out);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync}
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsyncint
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsyncmain(int argc, char **argv) {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync unsigned char *content, *out;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync xmlDocPtr doc;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync xmlNodePtr rootnode;
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync char *encoding = "ISO-8859-1";
560ba6dc387ecdf46295969d5e09e48b818b487fvboxsync
560ba6dc387ecdf46295969d5e09e48b818b487fvboxsync
560ba6dc387ecdf46295969d5e09e48b818b487fvboxsync if (argc <= 1) {
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync printf("Usage: %s content\n", argv[0]);
c299849be8ae3544715e8806e1433cae67d93e2evboxsync return(0);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync }
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync content = argv[1];
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync out = convert(content, encoding);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync doc = xmlNewDoc ("1.0");
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync rootnode = xmlNewDocNode(doc, NULL, (const xmlChar*)"root", out);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync xmlDocSetRootElement(doc, rootnode);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync xmlSaveFormatFileEnc("-", doc, encoding, 1);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync return (1);
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync}
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync]]>
1839eb6c2f3526b276ac2dcf3deae74f6ef8af44vboxsync