#include #include unsigned char* convert (unsigned char *in, char *encoding) { unsigned char *out; int ret,size,out_size,temp; xmlCharEncodingHandlerPtr handler; size = (int)strlen(in)+1; out_size = size*2-1; out = malloc((size_t)out_size); if (out) { handler = xmlFindCharEncodingHandler(encoding); if (!handler) { free(out); out = NULL; } } if (out) { temp=size-1; ret = handler->input(out, &out_size, in, &temp); if (ret || temp-size+1) { if (ret) { printf("conversion wasn't successful.\n"); } else { printf("conversion wasn't successful. converted: %i octets.\n",temp); } free(out); out = NULL; } else { out = realloc(out,out_size+1); out[out_size]=0; /*null terminating out*/ } } else { printf("no mem\n"); } return (out); } int main(int argc, char **argv) { FILE *f = NULL; char *tags[] = { "depend","runtime-depend","slot","sources","restrict","homepage","license","description","keywords","inherited","uses","cdepend","pdepend", NULL}; if (argc <= 1) { printf("Usage: %s filename\n", argv[0]); return(0); } if ((f = fopen(argv[1], "r"))) { int currentLineNumber = 0; unsigned char buffer[1000] = { 0 }; while (fgets(buffer, sizeof(buffer), f)) { char * p = strtok(buffer, "\n"); if (p && p[0]) { unsigned char *content, *out; char *encoding = "ISO-8859-1"; int i = 0; content = p; if (NULL != (out = convert(content, encoding))) { printf(" <%s>", tags[currentLineNumber]); for (i = 0; i < strlen(out); i++) { switch(p[i]) { case '&': putchar('&'); putchar('a'); putchar('m'); putchar('p'); putchar(';'); break; case '\'': putchar('&'); putchar('a'); putchar('p'); putchar('o'); putchar('s'); putchar(';'); break; case '"': putchar('&'); putchar('q'); putchar('u'); putchar('o'); putchar('t'); putchar(';'); break; case '<': putchar('&'); putchar('l'); putchar('t'); putchar(';'); break; case '>': putchar('&'); putchar('g'); putchar('t'); putchar(';'); break; default: putchar(p[i]); break; } } printf("\n", tags[currentLineNumber]); free(out); out = NULL; } } /* Increment and test currentLineNumber */ if (!tags[++currentLineNumber]) { break; } } } return (1); }