Index: third_party/libxml/src/testC14N.c |
diff --git a/third_party/libxml/src/testC14N.c b/third_party/libxml/src/testC14N.c |
index fbfa86968a82476555d064a51dc86d3a6f1d4e4e..86e58f27e405d477850da133023d2dcdc1cdfa91 100644 |
--- a/third_party/libxml/src/testC14N.c |
+++ b/third_party/libxml/src/testC14N.c |
@@ -3,7 +3,7 @@ |
* (http://www.w3.org/TR/2001/REC-xml-c14n-20010315) |
* |
* See Copyright for the status of this software. |
- * |
+ * |
* Author: Aleksey Sanin <aleksey@aleksey.com> |
*/ |
#include "libxml.h" |
@@ -11,8 +11,12 @@ |
#include <stdio.h> |
#include <string.h> |
+#ifndef STDOUT_FILENO |
#ifdef HAVE_UNISTD_H |
#include <unistd.h> |
+#else |
+#define STDOUT_FILENO fileno(stdout) |
+#endif /* HAVE_UNISTD_H */ |
#endif |
#ifdef HAVE_STDLIB_H |
#include <stdlib.h> |
@@ -52,11 +56,11 @@ static xmlChar **parse_list(xmlChar *str); |
/* static void print_xpath_nodes(xmlNodeSetPtr nodes); */ |
-static int |
+static int |
test_c14n(const char* xml_filename, int with_comments, int mode, |
const char* xpath_filename, xmlChar **inclusive_namespaces) { |
xmlDocPtr doc; |
- xmlXPathObjectPtr xpath = NULL; |
+ xmlXPathObjectPtr xpath = NULL; |
xmlChar *result = NULL; |
int ret; |
@@ -72,63 +76,65 @@ test_c14n(const char* xml_filename, int with_comments, int mode, |
fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename); |
return(-1); |
} |
- |
+ |
/* |
* Check the document is of the right kind |
- */ |
+ */ |
if(xmlDocGetRootElement(doc) == NULL) { |
fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename); |
xmlFreeDoc(doc); |
return(-1); |
} |
- /* |
- * load xpath file if specified |
+ /* |
+ * load xpath file if specified |
*/ |
if(xpath_filename) { |
xpath = load_xpath_expr(doc, xpath_filename); |
if(xpath == NULL) { |
fprintf(stderr,"Error: unable to evaluate xpath expression\n"); |
- xmlFreeDoc(doc); |
+ xmlFreeDoc(doc); |
return(-1); |
} |
} |
/* |
* Canonical form |
- */ |
+ */ |
/* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */ |
- ret = xmlC14NDocDumpMemory(doc, |
- (xpath) ? xpath->nodesetval : NULL, |
+ ret = xmlC14NDocDumpMemory(doc, |
+ (xpath) ? xpath->nodesetval : NULL, |
mode, inclusive_namespaces, |
with_comments, &result); |
if(ret >= 0) { |
if(result != NULL) { |
- write(1, result, ret); |
- xmlFree(result); |
+ if (write(STDOUT_FILENO, result, ret) == -1) { |
+ fprintf(stderr, "Can't write data\n"); |
+ } |
+ xmlFree(result); |
} |
} else { |
fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", xml_filename, ret); |
if(result != NULL) xmlFree(result); |
- xmlFreeDoc(doc); |
+ xmlFreeDoc(doc); |
return(-1); |
} |
- |
+ |
/* |
* Cleanup |
- */ |
+ */ |
if(xpath != NULL) xmlXPathFreeObject(xpath); |
- xmlFreeDoc(doc); |
+ xmlFreeDoc(doc); |
return(ret); |
} |
int main(int argc, char **argv) { |
int ret = -1; |
- |
+ |
/* |
* Init libxml |
- */ |
+ */ |
xmlInitParser(); |
LIBXML_TEST_VERSION |
@@ -148,14 +154,14 @@ int main(int argc, char **argv) { |
ret = test_c14n(argv[2], 0, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, NULL); |
} else if(strcmp(argv[1], "--exc-with-comments") == 0) { |
xmlChar **list; |
- |
+ |
/* load exclusive namespace from command line */ |
list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL; |
ret = test_c14n(argv[2], 1, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list); |
if(list != NULL) xmlFree(list); |
} else if(strcmp(argv[1], "--exc-without-comments") == 0) { |
xmlChar **list; |
- |
+ |
/* load exclusive namespace from command line */ |
list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL; |
ret = test_c14n(argv[2], 0, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list); |
@@ -165,7 +171,7 @@ int main(int argc, char **argv) { |
usage(argv[0]); |
} |
- /* |
+ /* |
* Shutdown libxml |
*/ |
xmlCleanupParser(); |
@@ -231,13 +237,13 @@ parse_list(xmlChar *str) { |
static xmlXPathObjectPtr |
load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { |
- xmlXPathObjectPtr xpath; |
+ xmlXPathObjectPtr xpath; |
xmlDocPtr doc; |
xmlChar *expr; |
- xmlXPathContextPtr ctx; |
+ xmlXPathContextPtr ctx; |
xmlNodePtr node; |
xmlNsPtr ns; |
- |
+ |
/* |
* load XPath expr as a file |
*/ |
@@ -249,10 +255,10 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { |
fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename); |
return(NULL); |
} |
- |
+ |
/* |
* Check the document is of the right kind |
- */ |
+ */ |
if(xmlDocGetRootElement(doc) == NULL) { |
fprintf(stderr,"Error: empty document for file \"%s\"\n", filename); |
xmlFreeDoc(doc); |
@@ -263,8 +269,8 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { |
while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) { |
node = node->next; |
} |
- |
- if(node == NULL) { |
+ |
+ if(node == NULL) { |
fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", filename); |
xmlFreeDoc(doc); |
return(NULL); |
@@ -280,8 +286,8 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { |
ctx = xmlXPathNewContext(parent_doc); |
if(ctx == NULL) { |
fprintf(stderr,"Error: unable to create new context\n"); |
- xmlFree(expr); |
- xmlFreeDoc(doc); |
+ xmlFree(expr); |
+ xmlFreeDoc(doc); |
return(NULL); |
} |
@@ -292,31 +298,31 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { |
while(ns != NULL) { |
if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) { |
fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href); |
- xmlFree(expr); |
- xmlXPathFreeContext(ctx); |
- xmlFreeDoc(doc); |
+ xmlFree(expr); |
+ xmlXPathFreeContext(ctx); |
+ xmlFreeDoc(doc); |
return(NULL); |
} |
ns = ns->next; |
} |
- /* |
+ /* |
* Evaluate xpath |
*/ |
xpath = xmlXPathEvalExpression(expr, ctx); |
if(xpath == NULL) { |
fprintf(stderr,"Error: unable to evaluate xpath expression\n"); |
- xmlFree(expr); |
- xmlXPathFreeContext(ctx); |
- xmlFreeDoc(doc); |
+ xmlFree(expr); |
+ xmlXPathFreeContext(ctx); |
+ xmlFreeDoc(doc); |
return(NULL); |
} |
/* print_xpath_nodes(xpath->nodesetval); */ |
- xmlFree(expr); |
- xmlXPathFreeContext(ctx); |
- xmlFreeDoc(doc); |
+ xmlFree(expr); |
+ xmlXPathFreeContext(ctx); |
+ xmlFreeDoc(doc); |
return(xpath); |
} |
@@ -325,28 +331,28 @@ static void |
print_xpath_nodes(xmlNodeSetPtr nodes) { |
xmlNodePtr cur; |
int i; |
- |
- if(nodes == NULL ){ |
+ |
+ if(nodes == NULL ){ |
fprintf(stderr, "Error: no nodes set defined\n"); |
return; |
} |
- |
+ |
fprintf(stderr, "Nodes Set:\n-----\n"); |
for(i = 0; i < nodes->nodeNr; ++i) { |
if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) { |
xmlNsPtr ns; |
- |
+ |
ns = (xmlNsPtr)nodes->nodeTab[i]; |
cur = (xmlNodePtr)ns->next; |
- fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n", |
+ fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n", |
ns->prefix, ns->href, |
(cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name); |
} else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) { |
- cur = nodes->nodeTab[i]; |
- fprintf(stderr, "element node \"%s:%s\"\n", |
+ cur = nodes->nodeTab[i]; |
+ fprintf(stderr, "element node \"%s:%s\"\n", |
(cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name); |
} else { |
- cur = nodes->nodeTab[i]; |
+ cur = nodes->nodeTab[i]; |
fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type); |
} |
} |