Fixing #74186, made sure all boolean expressions get fully parenthesized,
* c14n.c: Fixing #74186, made sure all boolean expressions
get fully parenthesized, ran indent on the output
* configure.in HTMLtree.c SAX.c c14n.c debugXML.c tree.c xpointer.c
include/libxml/tree.h: also #74186 related, removed the
--with-buffers option, and all the preprocessor conditional
sections that were resulting from it.
Daniel
diff --git a/c14n.c b/c14n.c
index 2b27020..7aab539 100644
--- a/c14n.c
+++ b/c14n.c
@@ -19,7 +19,7 @@
#include <libxml/tree.h>
#include <libxml/parser.h>
-#include <libxml/uri.h>
+#include <libxml/uri.h>
#include <libxml/xmlerror.h>
#include <libxml/globals.h>
#include <libxml/xpathInternals.h>
@@ -31,52 +31,50 @@
* *
************************************************************************/
-typedef enum {
- XMLC14N_BEFORE_DOCUMENT_ELEMENT= 0,
- XMLC14N_INSIDE_DOCUMENT_ELEMENT= 1,
- XMLC14N_AFTER_DOCUMENT_ELEMENT= 2
+typedef enum {
+ XMLC14N_BEFORE_DOCUMENT_ELEMENT = 0,
+ XMLC14N_INSIDE_DOCUMENT_ELEMENT = 1,
+ XMLC14N_AFTER_DOCUMENT_ELEMENT = 2
} xmlC14NPosition;
typedef struct _xmlC14NCtx {
/* input parameters */
- xmlDocPtr doc;
- xmlNodeSetPtr visible_nodes;
- int with_comments;
- xmlOutputBufferPtr buf;
+ xmlDocPtr doc;
+ xmlNodeSetPtr visible_nodes;
+ int with_comments;
+ xmlOutputBufferPtr buf;
/* position in the XML document */
- xmlC14NPosition pos;
- int parent_is_doc;
+ xmlC14NPosition pos;
+ int parent_is_doc;
/* exclusive canonicalization */
- int exclusive;
- xmlNodeSetPtr ns_rendered;
- xmlChar **inclusive_ns_prefixes;
+ int exclusive;
+ xmlNodeSetPtr ns_rendered;
+ xmlChar **inclusive_ns_prefixes;
} xmlC14NCtx, *xmlC14NCtxPtr;
-static int xmlC14NProcessNode (xmlC14NCtxPtr ctx,
- xmlNodePtr cur);
-static int xmlC14NProcessNodeList (xmlC14NCtxPtr ctx,
- xmlNodePtr cur);
+static int xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur);
+static int xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur);
typedef enum {
- XMLC14N_NORMALIZE_ATTR= 0,
- XMLC14N_NORMALIZE_COMMENT= 1,
- XMLC14N_NORMALIZE_PI= 2,
- XMLC14N_NORMALIZE_TEXT= 3
-} xmlC14NNormalizationMode;
+ XMLC14N_NORMALIZE_ATTR = 0,
+ XMLC14N_NORMALIZE_COMMENT = 1,
+ XMLC14N_NORMALIZE_PI = 2,
+ XMLC14N_NORMALIZE_TEXT = 3
+} xmlC14NNormalizationMode;
-static xmlChar* xmlC11NNormalizeString (const xmlChar *input,
- xmlC14NNormalizationMode mode);
+static xmlChar *xmlC11NNormalizeString(const xmlChar * input,
+ xmlC14NNormalizationMode mode);
#define xmlC11NNormalizeAttr( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR)
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR)
#define xmlC11NNormalizeComment( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT)
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT)
#define xmlC11NNormalizePI( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI)
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI)
#define xmlC11NNormalizeText( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT)
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT)
/************************************************************************
* *
@@ -94,19 +92,22 @@
*
* Returns 1 if the node is visible or 0 otherwise.
*/
+
/* todo: make it a define? */
-static int
-xmlC14NIsVisible(xmlC14NCtxPtr ctx, void *node) {
+static int
+xmlC14NIsVisible(xmlC14NCtxPtr ctx, void *node)
+{
/*
* If the input is an XPath node-set, then the node-set must explicitly
* contain every node to be rendered to the canonical form.
*/
- if(ctx->visible_nodes != NULL &&
- !xmlXPathNodeSetContains(ctx->visible_nodes, (xmlNodePtr)node)) {
- return(0);
- }
+ if ((ctx->visible_nodes != NULL) &&
+ (!xmlXPathNodeSetContains(ctx->visible_nodes, (xmlNodePtr) node)))
+ {
+ return (0);
+ }
- return(1);
+ return (1);
}
/**
@@ -118,12 +119,16 @@
*
* Returns 1 if the node is default or 0 otherwise
*/
+
/* todo: make it a define? */
static int
-xmlC14NIsXmlNs(xmlNsPtr ns) {
- return (ns != NULL &&
- xmlStrEqual(ns->prefix, BAD_CAST "xml") &&
- xmlStrEqual(ns->href, BAD_CAST "http://www.w3.org/XML/1998/namespace"));
+xmlC14NIsXmlNs(xmlNsPtr ns)
+{
+ return ((ns != NULL) &&
+ (xmlStrEqual(ns->prefix, BAD_CAST "xml")) &&
+ (xmlStrEqual(ns->href,
+ BAD_CAST
+ "http://www.w3.org/XML/1998/namespace")));
}
/**
@@ -136,26 +141,28 @@
* Returns 1 if we already wrote this namespace or 0 otherwise
*/
static int
-xmlExcC14NIsRendered(xmlC14NCtxPtr ctx, xmlNsPtr ns) {
+xmlExcC14NIsRendered(xmlC14NCtxPtr ctx, xmlNsPtr ns)
+{
int i;
-
- if(ctx == NULL || ctx->ns_rendered == NULL || ns == NULL) {
- return(0);
+
+ if ((ctx == NULL) || (ctx->ns_rendered == NULL) || (ns == NULL)) {
+ return (0);
}
- if(ctx->ns_rendered->nodeTab != NULL) {
- for(i = ctx->ns_rendered->nodeNr - 1; i >= 0; --i) {
- xmlNsPtr ns1 = (xmlNsPtr)ctx->ns_rendered->nodeTab[i];
- if(xmlStrEqual(ns1->prefix, ns->prefix)) {
- return (xmlStrEqual(ns1->href, ns->href));
- }
- }
- }
+ if (ctx->ns_rendered->nodeTab != NULL) {
+ for (i = ctx->ns_rendered->nodeNr - 1; i >= 0; --i) {
+ xmlNsPtr ns1 = (xmlNsPtr) ctx->ns_rendered->nodeTab[i];
+
+ if (xmlStrEqual(ns1->prefix, ns->prefix)) {
+ return (xmlStrEqual(ns1->href, ns->href));
+ }
+ }
+ }
/*
* if the default namespace xmlns="" is not defined yet then
* we do not want to print it out
*/
- return(xmlStrlen(ns->prefix) == 0 && xmlStrlen(ns->href) == 0);
+ return ((xmlStrlen(ns->prefix) == 0) && (xmlStrlen(ns->href) == 0));
}
/**
@@ -167,13 +174,17 @@
*
* Returns -1 if ns1 < ns2, 0 if ns1 == ns2 or 1 if ns1 > ns2.
*/
-static int
-xmlC14NNamespacesCompare(xmlNsPtr ns1, xmlNsPtr ns2) {
- if(ns1 == ns2) return(0);
- if(ns1 == NULL) return(-1);
- if(ns2 == NULL) return(1);
-
- return(xmlStrcmp(ns1->prefix, ns2->prefix));
+static int
+xmlC14NNamespacesCompare(xmlNsPtr ns1, xmlNsPtr ns2)
+{
+ if (ns1 == ns2)
+ return (0);
+ if (ns1 == NULL)
+ return (-1);
+ if (ns2 == NULL)
+ return (1);
+
+ return (xmlStrcmp(ns1->prefix, ns2->prefix));
}
@@ -187,26 +198,27 @@
* Returns 1 on success or 0 on fail.
*/
static int
-xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx) {
+xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx)
+{
- if(ns == NULL || ctx == NULL) {
+ if ((ns == NULL) || (ctx == NULL)) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NPrintNamespace: namespace or context pointer is null\n");
+ "xmlC14NPrintNamespace: namespace or context pointer is null\n");
#endif
- return 0;
+ return 0;
}
- if(ns->prefix != NULL) {
- xmlOutputBufferWriteString(ctx->buf, " xmlns:");
- xmlOutputBufferWriteString(ctx->buf, (const char *)ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, "=\"");
+ if (ns->prefix != NULL) {
+ xmlOutputBufferWriteString(ctx->buf, " xmlns:");
+ xmlOutputBufferWriteString(ctx->buf, (const char *) ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, "=\"");
} else {
- xmlOutputBufferWriteString(ctx->buf, " xmlns=\"");
+ xmlOutputBufferWriteString(ctx->buf, " xmlns=\"");
}
xmlOutputBufferWriteString(ctx->buf, (const char *) ns->href);
xmlOutputBufferWriteString(ctx->buf, "\"");
- return(1);
+ return (1);
}
/**
@@ -249,36 +261,39 @@
* Returns 0 on success or -1 on fail.
*/
static int
-xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur) {
+xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
xmlNsPtr ns;
xmlListPtr list;
xmlNodePtr visible_parent;
xmlNsPtr prev;
-
- if(ctx == NULL || cur == NULL || cur->type != XML_ELEMENT_NODE) {
-#ifdef DEBUG_C14N
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNamespacesAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
-#endif
- return(-1);
- }
+ "xmlC14NProcessNamespacesAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
/*
* Create a sorted list to store element namespaces
*/
- list = xmlListCreate(NULL, (xmlListDataCompare)xmlC14NNamespacesCompare);
- if(list == NULL) {
+ list =
+ xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNamespacesCompare);
+ if (list == NULL) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNamespacesAxis: list creation failed\n");
+ "xmlC14NProcessNamespacesAxis: list creation failed\n");
#endif
- return(-1);
- }
-
+ return (-1);
+ }
+
/* find nearest visible parent */
visible_parent = cur->parent;
- while(visible_parent != NULL && !xmlC14NIsVisible(ctx, visible_parent)) {
- visible_parent = visible_parent->parent;
+ while ((visible_parent != NULL) &&
+ (!xmlC14NIsVisible(ctx, visible_parent))) {
+ visible_parent = visible_parent->parent;
}
/*
@@ -287,46 +302,49 @@
* defined in node parents). By this we need to now walk thru
* all namespace in current node and all invisible ancesstors
*/
- while(cur != visible_parent) {
- for(ns = cur->nsDef; ns != NULL; ns = ns->next) {
- /*
- * first of all ignore default "xml" namespace and
- * already included namespace
- */
- if(xmlC14NIsXmlNs(ns) || xmlListSearch(list, ns) != NULL) {
- continue;
- }
+ while (cur != visible_parent) {
+ for (ns = cur->nsDef; ns != NULL; ns = ns->next) {
+ /*
+ * first of all ignore default "xml" namespace and
+ * already included namespace
+ */
+ if ((xmlC14NIsXmlNs(ns)) || (xmlListSearch(list, ns) != NULL)) {
+ continue;
+ }
- /*
- * Lookup nearest namespace after visible parent having
- * the same prefix. Namespace included if and only if one of
- * the following:
- * - another namespace having the same prefix but
- * different value found or
- * - there is no namespaces having the same prefix and
- * it is not a default xmlns="" namespace (empty prefix
- * and empty href)
- */
- prev = xmlSearchNs(ctx->doc, visible_parent, ns->prefix);
- if(prev == NULL && (xmlStrlen(ns->prefix) > 0 || xmlStrlen(ns->href) > 0)) {
- xmlListInsert(list, ns);
- } else if(prev != NULL && !xmlStrEqual(ns->href, prev->href)) {
- xmlListInsert(list, ns);
- }
- }
- cur = cur->parent;
+ /*
+ * Lookup nearest namespace after visible parent having
+ * the same prefix. Namespace included if and only if one of
+ * the following:
+ * - another namespace having the same prefix but
+ * different value found or
+ * - there is no namespaces having the same prefix and
+ * it is not a default xmlns="" namespace (empty prefix
+ * and empty href)
+ */
+ prev = xmlSearchNs(ctx->doc, visible_parent, ns->prefix);
+ if ((prev == NULL) && ((xmlStrlen(ns->prefix) > 0) ||
+ (xmlStrlen(ns->href) > 0))) {
+ xmlListInsert(list, ns);
+ } else if ((prev != NULL)
+ && (!xmlStrEqual(ns->href, prev->href))) {
+ xmlListInsert(list, ns);
+ }
+ }
+ cur = cur->parent;
}
/*
* print out all elements from list
*/
- xmlListWalk(list, (xmlListWalker)xmlC14NPrintNamespaces, (const void*)ctx);
-
+ xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces,
+ (const void *) ctx);
+
/*
* Cleanup
*/
xmlListDelete(list);
- return(0);
+ return (0);
}
/**
@@ -360,39 +378,41 @@
* Returns 0 on success or -1 on fail.
*/
static int
-xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur) {
+xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
xmlListPtr list;
xmlAttrPtr attr;
xmlNsPtr ns;
-
- if(ctx == NULL || cur == NULL || cur->type != XML_ELEMENT_NODE) {
-#ifdef DEBUG_C14N
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlExcC14NProcessNamespacesAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
-#endif
- return(-1);
- }
-
- if(!ctx->exclusive || ctx->ns_rendered == NULL) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlExcC14NProcessNamespacesAxis: called for non-exclusive canonization or rendered stack is NULL.\n");
-#endif
- return(-1);
-
+ "xmlExcC14NProcessNamespacesAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
}
-
+
+ if ((!ctx->exclusive) || (ctx->ns_rendered == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlExcC14NProcessNamespacesAxis: called for non-exclusive canonization or rendered stack is NULL.\n");
+#endif
+ return (-1);
+
+ }
+
/*
* Create a sorted list to store element namespaces
*/
- list = xmlListCreate(NULL, (xmlListDataCompare)xmlC14NNamespacesCompare);
- if(list == NULL) {
+ list =
+ xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNamespacesCompare);
+ if (list == NULL) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlExcC14NProcessNamespacesAxis: list creation failed\n");
+ "xmlExcC14NProcessNamespacesAxis: list creation failed\n");
#endif
- return(-1);
- }
+ return (-1);
+ }
/*
* First of all, add all namespaces required by current node
@@ -400,67 +420,72 @@
* todo: do we need to check for default "xml:" namespace
*/
ns = (cur->ns != NULL) ? cur->ns : xmlSearchNs(ctx->doc, cur, NULL);
- if(ns != NULL && !xmlC14NIsXmlNs(ns) && xmlListSearch(list, ns) == NULL) {
- if(!xmlExcC14NIsRendered(ctx, ns)) {
- xmlListInsert(list, ns);
- xmlXPathNodeSetAdd(ctx->ns_rendered, (xmlNodePtr)ns);
- }
+ if ((ns != NULL) && (!xmlC14NIsXmlNs(ns)) &&
+ (xmlListSearch(list, ns) == NULL)) {
+ if (!xmlExcC14NIsRendered(ctx, ns)) {
+ xmlListInsert(list, ns);
+ xmlXPathNodeSetAdd(ctx->ns_rendered, (xmlNodePtr) ns);
+ }
}
attr = cur->properties;
- while (attr != NULL) {
- /*
- * todo: do we need to check that attribute is visible and has non
- * default namespace
- */
- if(xmlC14NIsVisible(ctx, attr)) {
- ns = (attr->ns != NULL) ? attr->ns : xmlSearchNs(ctx->doc, cur, NULL);
- if(ns != NULL && xmlC14NIsVisible(ctx, attr) && !xmlC14NIsXmlNs(ns)) {
- if(xmlListSearch(list, ns) == NULL &&
- !xmlExcC14NIsRendered(ctx, ns)) {
- xmlListInsert(list, ns);
- xmlXPathNodeSetAdd(ctx->ns_rendered, (xmlNodePtr)ns);
- }
- }
- }
- attr = attr->next;
+ while (attr != NULL) {
+ /*
+ * todo: do we need to check that attribute is visible and has non
+ * default namespace
+ */
+ if (xmlC14NIsVisible(ctx, attr)) {
+ ns = (attr->ns != NULL) ? attr->ns : xmlSearchNs(ctx->doc, cur,
+ NULL);
+ if ((ns != NULL) && (xmlC14NIsVisible(ctx, attr)) &&
+ (!xmlC14NIsXmlNs(ns))) {
+ if ((xmlListSearch(list, ns) == NULL)
+ && (!xmlExcC14NIsRendered(ctx, ns))) {
+ xmlListInsert(list, ns);
+ xmlXPathNodeSetAdd(ctx->ns_rendered, (xmlNodePtr) ns);
+ }
+ }
+ }
+ attr = attr->next;
}
-
+
/*
* Next add all inclusive namespaces if needed.
*/
- if(ctx->inclusive_ns_prefixes != NULL) {
- int i;
- xmlChar *prefix;
-
- for(i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) {
- prefix = ctx->inclusive_ns_prefixes[i];
- /*
- * Special values for namespace with empty prefix
- */
- if(xmlStrEqual(prefix, BAD_CAST "#default") || xmlStrEqual(prefix, BAD_CAST "")) {
- prefix = NULL;
- }
- ns = xmlSearchNs(ctx->doc, cur, prefix);
- if(ns != NULL && !xmlC14NIsXmlNs(ns)) {
- if(xmlListSearch(list, ns) == NULL &&
- !xmlExcC14NIsRendered(ctx, ns)) {
- xmlListInsert(list, ns);
- xmlXPathNodeSetAdd(ctx->ns_rendered, (xmlNodePtr)ns);
- }
- }
- }
+ if (ctx->inclusive_ns_prefixes != NULL) {
+ int i;
+ xmlChar *prefix;
+
+ for (i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) {
+ prefix = ctx->inclusive_ns_prefixes[i];
+ /*
+ * Special values for namespace with empty prefix
+ */
+ if (xmlStrEqual(prefix, BAD_CAST "#default")
+ || xmlStrEqual(prefix, BAD_CAST "")) {
+ prefix = NULL;
+ }
+ ns = xmlSearchNs(ctx->doc, cur, prefix);
+ if ((ns != NULL) && (!xmlC14NIsXmlNs(ns))) {
+ if (xmlListSearch(list, ns) == NULL &&
+ !xmlExcC14NIsRendered(ctx, ns)) {
+ xmlListInsert(list, ns);
+ xmlXPathNodeSetAdd(ctx->ns_rendered, (xmlNodePtr) ns);
+ }
+ }
+ }
}
-
+
/*
* print out all elements from list
*/
- xmlListWalk(list, (xmlListWalker)xmlC14NPrintNamespaces, (const void*)ctx);
-
+ xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces,
+ (const void *) ctx);
+
/*
* Cleanup
*/
xmlListDelete(list);
- return(0);
+ return (0);
}
@@ -474,17 +499,21 @@
* Returns -1 if attr1 < attr2, 0 if attr1 == attr2 or 1 if attr1 > attr2.
*/
static int
-xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2) {
+xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2)
+{
int ret = 0;
/*
* Simple cases
*/
- if(attr1 == attr2) return(0);
- if(attr1 == NULL) return(-1);
- if(attr2 == NULL) return(1);
- if(attr1->ns == attr2->ns) {
- return(xmlStrcmp(attr1->name, attr2->name));
+ if (attr1 == attr2)
+ return (0);
+ if (attr1 == NULL)
+ return (-1);
+ if (attr2 == NULL)
+ return (1);
+ if (attr1->ns == attr2->ns) {
+ return (xmlStrcmp(attr1->name, attr2->name));
}
/*
@@ -492,16 +521,20 @@
* because the default namespace is not applied to
* unqualified attributes
*/
- if(attr1->ns == NULL) return(-1);
- if(attr2->ns == NULL) return(1);
- if(attr1->ns->prefix == NULL) return(-1);
- if(attr2->ns->prefix == NULL) return(1);
-
+ if (attr1->ns == NULL)
+ return (-1);
+ if (attr2->ns == NULL)
+ return (1);
+ if (attr1->ns->prefix == NULL)
+ return (-1);
+ if (attr2->ns->prefix == NULL)
+ return (1);
+
ret = xmlStrcmp(attr1->ns->href, attr2->ns->href);
- if(ret == 0) {
- ret = xmlStrcmp(attr1->name, attr2->name);
+ if (ret == 0) {
+ ret = xmlStrcmp(attr1->name, attr2->name);
}
- return(ret);
+ return (ret);
}
@@ -518,44 +551,46 @@
* Returns 1 on success or 0 on fail.
*/
static int
-xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx) {
+xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx)
+{
xmlChar *value;
xmlChar *buffer;
- if(attr == NULL || ctx == NULL) {
+ if ((attr == NULL) || (ctx == NULL)) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NPrintAttrs: attr == NULL or ctx == NULL\n");
+ "xmlC14NPrintAttrs: attr == NULL or ctx == NULL\n");
#endif
- return(0);
+ return (0);
}
xmlOutputBufferWriteString(ctx->buf, " ");
- if(attr->ns != NULL && xmlStrlen(attr->ns->prefix) > 0) {
- xmlOutputBufferWriteString(ctx->buf, (const char *) attr->ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, ":");
+ if (attr->ns != NULL && xmlStrlen(attr->ns->prefix) > 0) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) attr->ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, ":");
}
xmlOutputBufferWriteString(ctx->buf, (const char *) attr->name);
xmlOutputBufferWriteString(ctx->buf, "=\"");
value = xmlNodeListGetString(attr->doc, attr->children, 1);
/* todo: should we log an error if value==NULL ? */
- if(value != NULL) {
- buffer = xmlC11NNormalizeAttr(value);
- xmlFree(value);
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf, (const char *)buffer);
- xmlFree(buffer);
- } else {
+ if (value != NULL) {
+ buffer = xmlC11NNormalizeAttr(value);
+ xmlFree(value);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf, (const char *) buffer);
+ xmlFree(buffer);
+ } else {
#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NPrintAttrs: xmlC11NNormalizeAttr failed\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NPrintAttrs: xmlC11NNormalizeAttr failed\n");
#endif
- return(0);
- }
+ return (0);
+ }
}
xmlOutputBufferWriteString(ctx->buf, "\"");
- return(1);
+ return (1);
}
/**
@@ -590,76 +625,80 @@
* Returns 0 on success or -1 on fail.
*/
static int
-xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur) {
+xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
xmlAttrPtr attr;
xmlListPtr list;
-
- if(ctx == NULL || cur == NULL || cur->type != XML_ELEMENT_NODE) {
-#ifdef DEBUG_C14N
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessAttrsAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
-#endif
- return(-1);
- }
+ "xmlC14NProcessAttrsAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
/*
* Create a sorted list to store element attributes
*/
- list = xmlListCreate(NULL, (xmlListDataCompare)xmlC14NAttrsCompare);
- if(list == NULL) {
+ list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NAttrsCompare);
+ if (list == NULL) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessAttrsAxis: list creation failed\n");
+ "xmlC14NProcessAttrsAxis: list creation failed\n");
#endif
- return(-1);
+ return (-1);
}
/*
* Add all visible attributes from current node.
*/
attr = cur->properties;
- while (attr != NULL) {
- /* check that attribute is visible */
- if(xmlC14NIsVisible(ctx, attr)) {
- xmlListInsert(list, attr);
- }
- attr = attr->next;
+ while (attr != NULL) {
+ /* check that attribute is visible */
+ if (xmlC14NIsVisible(ctx, attr)) {
+ xmlListInsert(list, attr);
+ }
+ attr = attr->next;
}
-
+
/*
* include attributes in "xml" namespace defined in ancestors
* (only for non-exclusive XML Canonicalization)
*/
- if(!ctx->exclusive && cur->parent != NULL && !xmlC14NIsVisible(ctx, cur->parent)) {
+ if ((!ctx->exclusive) && (cur->parent != NULL)
+ && (!xmlC14NIsVisible(ctx, cur->parent))) {
/*
- * If XPath node-set is not specified then the parent is always
- * visible!
- */
- cur = cur->parent;
- while(cur != NULL) {
- attr = cur->properties;
- while (attr != NULL) {
- if(attr->ns != NULL && xmlStrEqual(attr->ns->prefix, BAD_CAST "xml")) {
- if(xmlListSearch(list, attr) == NULL) {
- xmlListInsert(list, attr);
- }
- }
- attr = attr->next;
- }
- cur = cur->parent;
- }
+ * If XPath node-set is not specified then the parent is always
+ * visible!
+ */
+ cur = cur->parent;
+ while (cur != NULL) {
+ attr = cur->properties;
+ while (attr != NULL) {
+ if ((attr->ns != NULL)
+ && (xmlStrEqual(attr->ns->prefix, BAD_CAST "xml"))) {
+ if (xmlListSearch(list, attr) == NULL) {
+ xmlListInsert(list, attr);
+ }
+ }
+ attr = attr->next;
+ }
+ cur = cur->parent;
+ }
}
-
+
/*
* print out all elements from list
*/
- xmlListWalk(list, (xmlListWalker)xmlC14NPrintAttrs, (const void*)ctx);
-
+ xmlListWalk(list, (xmlListWalker) xmlC14NPrintAttrs,
+ (const void *) ctx);
+
/*
* Cleanup
*/
- xmlListDelete(list);
- return(0);
+ xmlListDelete(list);
+ return (0);
}
/**
@@ -672,43 +711,47 @@
* Returns 0 if the node has no relative namespaces or -1 otherwise.
*/
static int
-xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur) {
+xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
xmlNsPtr ns;
-
- if(ctx == NULL || cur == NULL || cur->type != XML_ELEMENT_NODE) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NCheckForRelativeNamespaces: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
-#endif
- return(-1);
- }
- ns = cur->nsDef;
- while(ns != NULL) {
- if(xmlStrlen(ns->href) > 0) {
- xmlURIPtr uri;
-
- uri = xmlParseURI((const char *) ns->href);
- if(uri == NULL) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NCheckForRelativeNamespaces: unable to parse uri=\"%s\".\n", ns->href);
-#endif
- return(-1);
- }
- if(xmlStrlen((const xmlChar *) uri->scheme) == 0) {
- xmlFreeURI(uri);
- return(-1);
- }
- if(!xmlStrEqual((const xmlChar *) uri->scheme, BAD_CAST "urn") && xmlStrlen((const xmlChar *) uri->server) == 0) {
- xmlFreeURI(uri);
- return(-1);
- }
- xmlFreeURI(uri);
- }
- ns = ns->next;
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NCheckForRelativeNamespaces: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
}
- return(0);
+
+ ns = cur->nsDef;
+ while (ns != NULL) {
+ if (xmlStrlen(ns->href) > 0) {
+ xmlURIPtr uri;
+
+ uri = xmlParseURI((const char *) ns->href);
+ if (uri == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NCheckForRelativeNamespaces: unable to parse uri=\"%s\".\n",
+ ns->href);
+#endif
+ return (-1);
+ }
+ if (xmlStrlen((const xmlChar *) uri->scheme) == 0) {
+ xmlFreeURI(uri);
+ return (-1);
+ }
+ if ((!xmlStrEqual
+ ((const xmlChar *) uri->scheme, BAD_CAST "urn"))
+ && (xmlStrlen((const xmlChar *) uri->server) == 0)) {
+ xmlFreeURI(uri);
+ return (-1);
+ }
+ xmlFreeURI(uri);
+ }
+ ns = ns->next;
+ }
+ return (0);
}
/**
@@ -733,29 +776,30 @@
* Returns non-negative value on success or negative value on fail
*/
static int
-xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) {
+xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
+{
int ret;
int ns_rendered_pos = 0;
- if(ctx == NULL || cur == NULL || cur->type != XML_ELEMENT_NODE) {
-#ifdef DEBUG_C14N
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessElementNode: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
-#endif
- return(-1);
- }
+ "xmlC14NProcessElementNode: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
/*
* Check relative relative namespaces:
* implementations of XML canonicalization MUST report an operation
* failure on documents containing relative namespace URIs.
*/
- if(xmlC14NCheckForRelativeNamespaces(ctx, cur) < 0) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessElementNode: xmlC14NCheckForRelativeNamespaces failed.\n");
-#endif
- return(-1);
+ if (xmlC14NCheckForRelativeNamespaces(ctx, cur) < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NCheckForRelativeNamespaces failed.\n");
+#endif
+ return (-1);
}
@@ -763,77 +807,79 @@
* Save ns_rendered stack position for exclusive
* processing
*/
- if(ctx->exclusive && ctx->ns_rendered != NULL) {
- ns_rendered_pos = ctx->ns_rendered->nodeNr;
- }
+ if ((ctx->exclusive) && (ctx->ns_rendered != NULL)) {
+ ns_rendered_pos = ctx->ns_rendered->nodeNr;
+ }
- if(visible) {
- if(ctx->parent_is_doc) {
- ctx->pos = XMLC14N_INSIDE_DOCUMENT_ELEMENT;
- }
- xmlOutputBufferWriteString(ctx->buf, "<");
+ if (visible) {
+ if (ctx->parent_is_doc) {
+ ctx->pos = XMLC14N_INSIDE_DOCUMENT_ELEMENT;
+ }
+ xmlOutputBufferWriteString(ctx->buf, "<");
- if(cur->ns != NULL && xmlStrlen(cur->ns->prefix) > 0) {
- xmlOutputBufferWriteString(ctx->buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, ":");
- }
- xmlOutputBufferWriteString(ctx->buf, (const char *)cur->name);
+ if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) cur->ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, ":");
+ }
+ xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
- if(ctx->exclusive) {
- ret = xmlExcC14NProcessNamespacesAxis(ctx, cur);
- } else {
- ret = xmlC14NProcessNamespacesAxis(ctx, cur);
- }
- if(ret < 0) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessElementNode: xmlC14NProcessNamespacesAxis failed.\n");
-#endif
- return(-1);
- }
-
- ret = xmlC14NProcessAttrsAxis(ctx, cur);
- if(ret < 0) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessElementNode: xmlC14NProcessAttrsAxis failed.\n");
-#endif
- return(-1);
- }
+ if (ctx->exclusive) {
+ ret = xmlExcC14NProcessNamespacesAxis(ctx, cur);
+ } else {
+ ret = xmlC14NProcessNamespacesAxis(ctx, cur);
+ }
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NProcessNamespacesAxis failed.\n");
+#endif
+ return (-1);
+ }
- xmlOutputBufferWriteString(ctx->buf, ">");
+ ret = xmlC14NProcessAttrsAxis(ctx, cur);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NProcessAttrsAxis failed.\n");
+#endif
+ return (-1);
+ }
+
+ xmlOutputBufferWriteString(ctx->buf, ">");
}
if (cur->children != NULL) {
- ret = xmlC14NProcessNodeList(ctx, cur->children);
- if(ret < 0) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessElementNode: xmlC14NProcessNodeList failed.\n");
-#endif
- return(-1);
- }
+ ret = xmlC14NProcessNodeList(ctx, cur->children);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NProcessNodeList failed.\n");
+#endif
+ return (-1);
+ }
}
- if(visible) {
- xmlOutputBufferWriteString(ctx->buf, "</");
- if(cur->ns != NULL && xmlStrlen(cur->ns->prefix) > 0) {
- xmlOutputBufferWriteString(ctx->buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, ":");
- }
- xmlOutputBufferWriteString(ctx->buf, (const char *)cur->name);
- xmlOutputBufferWriteString(ctx->buf, ">");
- if(ctx->parent_is_doc) {
- ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
- }
+ if (visible) {
+ xmlOutputBufferWriteString(ctx->buf, "</");
+ if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) cur->ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, ":");
+ }
+ xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
+ xmlOutputBufferWriteString(ctx->buf, ">");
+ if (ctx->parent_is_doc) {
+ ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
+ }
}
/*
* Restore ns_rendered stack position for exclusive
* processing
*/
- if(ctx->exclusive && ctx->ns_rendered != NULL) {
- ctx->ns_rendered->nodeNr = ns_rendered_pos;
- }
- return(0);
+ if ((ctx->exclusive) && (ctx->ns_rendered != NULL)) {
+ ctx->ns_rendered->nodeNr = ns_rendered_pos;
+ }
+ return (0);
}
/**
@@ -846,204 +892,199 @@
* Returns non-negative value on success or negative value on fail
*/
static int
-xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur) {
+xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
int ret = 0;
int visible;
-
- if(ctx == NULL || cur == NULL) {
-#ifdef DEBUG_C14N
+
+ if ((ctx == NULL) || (cur == NULL)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: Null context or node pointer.\n");
-#endif
- return(-1);
+ "xmlC14NProcessNode: Null context or node pointer.\n");
+#endif
+ return (-1);
}
visible = xmlC14NIsVisible(ctx, cur);
- switch(cur->type) {
- case XML_ELEMENT_NODE:
- ret = xmlC14NProcessElementNode(ctx, cur, visible);
- break;
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- /*
- * Text Nodes
- * the string value, except all ampersands are replaced
- * by &, all open angle brackets (<) are replaced by <, all closing
- * angle brackets (>) are replaced by >, and all #xD characters are
- * replaced by 
.
- */
- /* cdata sections are processed as text nodes */
- /* todo: verify that cdata sections are included in XPath nodes set */
- if(visible && cur->content != NULL) {
- xmlChar *buffer;
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ ret = xmlC14NProcessElementNode(ctx, cur, visible);
+ break;
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ /*
+ * Text Nodes
+ * the string value, except all ampersands are replaced
+ * by &, all open angle brackets (<) are replaced by <, all closing
+ * angle brackets (>) are replaced by >, and all #xD characters are
+ * replaced by 
.
+ */
+ /* cdata sections are processed as text nodes */
+ /* todo: verify that cdata sections are included in XPath nodes set */
+ if ((visible) && (cur->content != NULL)) {
+ xmlChar *buffer;
-#ifndef XML_USE_BUFFER_CONTENT
- buffer = xmlC11NNormalizeText(cur->content);
-#else
- buffer = xmlC11NNormalizeText(xmlBufferContent(cur->content));
-#endif
- if(buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf, (const char *)buffer);
- xmlFree(buffer);
- } else {
+ buffer = xmlC11NNormalizeText(cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) buffer);
+ xmlFree(buffer);
+ } else {
#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: xmlC11NNormalizeText() failed\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: xmlC11NNormalizeText() failed\n");
#endif
- return(-1);
- }
- }
- break;
- case XML_PI_NODE:
- /*
- * Processing Instruction (PI) Nodes-
- * The opening PI symbol (<?), the PI target name of the node,
- * a leading space and the string value if it is not empty, and
- * the closing PI symbol (?>). If the string value is empty,
- * then the leading space is not added. Also, a trailing #xA is
- * rendered after the closing PI symbol for PI children of the
- * root node with a lesser document order than the document
- * element, and a leading #xA is rendered before the opening PI
- * symbol of PI children of the root node with a greater document
- * order than the document element.
- */
- if(visible) {
- if(ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "\x0A<?");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "<?");
- }
+ return (-1);
+ }
+ }
+ break;
+ case XML_PI_NODE:
+ /*
+ * Processing Instruction (PI) Nodes-
+ * The opening PI symbol (<?), the PI target name of the node,
+ * a leading space and the string value if it is not empty, and
+ * the closing PI symbol (?>). If the string value is empty,
+ * then the leading space is not added. Also, a trailing #xA is
+ * rendered after the closing PI symbol for PI children of the
+ * root node with a lesser document order than the document
+ * element, and a leading #xA is rendered before the opening PI
+ * symbol of PI children of the root node with a greater document
+ * order than the document element.
+ */
+ if (visible) {
+ if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "\x0A<?");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "<?");
+ }
- xmlOutputBufferWriteString(ctx->buf, (const char *)cur->name);
- if(cur->content != NULL && *(cur->content) != '\0') {
- xmlChar *buffer;
- xmlOutputBufferWriteString(ctx->buf, " ");
-
- /* todo: do we need to normalize pi? */
-#ifndef XML_USE_BUFFER_CONTENT
- buffer = xmlC11NNormalizePI(cur->content);
-#else
- buffer = xmlC11NNormalizePI(xmlBufferContent(cur->content));
-#endif
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf, (const char *)buffer);
- xmlFree(buffer);
- } else {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) cur->name);
+ if ((cur->content != NULL) && (*(cur->content) != '\0')) {
+ xmlChar *buffer;
+
+ xmlOutputBufferWriteString(ctx->buf, " ");
+
+ /* todo: do we need to normalize pi? */
+ buffer = xmlC11NNormalizePI(cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) buffer);
+ xmlFree(buffer);
+ } else {
#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: xmlC11NNormalizePI() failed\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: xmlC11NNormalizePI() failed\n");
#endif
- return(-1);
- }
- }
+ return (-1);
+ }
+ }
- if(ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "?>\x0A");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "?>");
- }
- }
- break;
- case XML_COMMENT_NODE:
- /*
- * Comment Nodes
- * Nothing if generating canonical XML without comments. For
- * canonical XML with comments, generate the opening comment
- * symbol (<!--), the string value of the node, and the
- * closing comment symbol (-->). Also, a trailing #xA is rendered
- * after the closing comment symbol for comment children of the
- * root node with a lesser document order than the document
- * element, and a leading #xA is rendered before the opening
- * comment symbol of comment children of the root node with a
- * greater document order than the document element. (Comment
- * children of the root node represent comments outside of the
- * top-level document element and outside of the document type
- * declaration).
- */
- if(visible && ctx->with_comments) {
- if(ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "\x0A<!--");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "<!--");
- }
+ if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "?>\x0A");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "?>");
+ }
+ }
+ break;
+ case XML_COMMENT_NODE:
+ /*
+ * Comment Nodes
+ * Nothing if generating canonical XML without comments. For
+ * canonical XML with comments, generate the opening comment
+ * symbol (<!--), the string value of the node, and the
+ * closing comment symbol (-->). Also, a trailing #xA is rendered
+ * after the closing comment symbol for comment children of the
+ * root node with a lesser document order than the document
+ * element, and a leading #xA is rendered before the opening
+ * comment symbol of comment children of the root node with a
+ * greater document order than the document element. (Comment
+ * children of the root node represent comments outside of the
+ * top-level document element and outside of the document type
+ * declaration).
+ */
+ if (visible && ctx->with_comments) {
+ if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "\x0A<!--");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "<!--");
+ }
- if(cur->content != NULL) {
- xmlChar *buffer;
+ if (cur->content != NULL) {
+ xmlChar *buffer;
- /* todo: do we need to normalize comment? */
-#ifndef XML_USE_BUFFER_CONTENT
- buffer = xmlC11NNormalizeComment(cur->content);
-#else
- buffer = xmlC11NNormalizeString(xmlBufferContent(cur->content));
-#endif
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf, (const char *)buffer);
- xmlFree(buffer);
- } else {
+ /* todo: do we need to normalize comment? */
+ buffer = xmlC11NNormalizeComment(cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) buffer);
+ xmlFree(buffer);
+ } else {
#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: xmlC11NNormalizeComment() failed\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: xmlC11NNormalizeComment() failed\n");
#endif
- return(-1);
- }
- }
-
- if(ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "-->\x0A");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "-->");
- }
- }
- break;
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE: /* should be processed as document? */
- case XML_DOCB_DOCUMENT_NODE: /* should be processed as document? */
- case XML_HTML_DOCUMENT_NODE: /* should be processed as document? */
- if (cur->children != NULL) {
- ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
- ctx->parent_is_doc = 1;
- ret = xmlC14NProcessNodeList(ctx, cur->children);
- }
- break;
+ return (-1);
+ }
+ }
- case XML_ATTRIBUTE_NODE:
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: XML_ATTRIBUTE_NODE is illegal here\n");
- return(-1);
- case XML_NAMESPACE_DECL:
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: XML_NAMESPACE_DECL is illegal here\n");
- return(-1);
- case XML_ENTITY_REF_NODE:
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: XML_ENTITY_REF_NODE is illegal here\n");
- return(-1);
- case XML_ENTITY_NODE:
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: XML_ENTITY_NODE is illegal here\n");
- return(-1);
+ if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "-->\x0A");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "-->");
+ }
+ }
+ break;
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_FRAG_NODE: /* should be processed as document? */
+ case XML_DOCB_DOCUMENT_NODE: /* should be processed as document? */
+ case XML_HTML_DOCUMENT_NODE: /* should be processed as document? */
+ if (cur->children != NULL) {
+ ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
+ ctx->parent_is_doc = 1;
+ ret = xmlC14NProcessNodeList(ctx, cur->children);
+ }
+ break;
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- /*
- * should be ignored according to "W3C Canonical XML"
- */
- break;
- default:
+ case XML_ATTRIBUTE_NODE:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: XML_ATTRIBUTE_NODE is illegal here\n");
+ return (-1);
+ case XML_NAMESPACE_DECL:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: XML_NAMESPACE_DECL is illegal here\n");
+ return (-1);
+ case XML_ENTITY_REF_NODE:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: XML_ENTITY_REF_NODE is illegal here\n");
+ return (-1);
+ case XML_ENTITY_NODE:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: XML_ENTITY_NODE is illegal here\n");
+ return (-1);
+
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ /*
+ * should be ignored according to "W3C Canonical XML"
+ */
+ break;
+ default:
#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNode: unknown node type = %d\n", cur->type);
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: unknown node type = %d\n",
+ cur->type);
#endif
- return(-1);
+ return (-1);
}
- return(ret);
+ return (ret);
}
/**
@@ -1056,21 +1097,22 @@
* Returns non-negative value on success or negative value on fail
*/
static int
-xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur) {
+xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
int ret;
-
- if(ctx == NULL) {
-#ifdef DEBUG_C14N
+
+ if (ctx == NULL) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NProcessNodeList: Null context pointer.\n");
-#endif
- return(-1);
+ "xmlC14NProcessNodeList: Null context pointer.\n");
+#endif
+ return (-1);
}
- for(ret = 0; cur != NULL && ret >= 0; cur = cur->next) {
- ret = xmlC14NProcessNode(ctx, cur);
- }
- return(ret);
+ for (ret = 0; cur != NULL && ret >= 0; cur = cur->next) {
+ ret = xmlC14NProcessNode(ctx, cur);
+ }
+ return (ret);
}
@@ -1082,17 +1124,18 @@
*/
static void
-xmlC14NFreeCtx(xmlC14NCtxPtr ctx) {
- if(ctx == NULL) {
+xmlC14NFreeCtx(xmlC14NCtxPtr ctx)
+{
+ if (ctx == NULL) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NFreeCtx: ctx == NULL\n");
+ "xmlC14NFreeCtx: ctx == NULL\n");
#endif
- return;
+ return;
}
-
- if(ctx->ns_rendered != NULL) {
- xmlXPathFreeNodeSet(ctx->ns_rendered);
+
+ if (ctx->ns_rendered != NULL) {
+ xmlXPathFreeNodeSet(ctx->ns_rendered);
}
xmlFree(ctx);
}
@@ -1118,37 +1161,37 @@
* Returns pointer to newly created object (success) or NULL (fail)
*/
static xmlC14NCtxPtr
-xmlC14NNewCtx(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int exclusive, xmlChar **inclusive_ns_prefixes,
- int with_comments,
- xmlOutputBufferPtr buf) {
+xmlC14NNewCtx(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, xmlOutputBufferPtr buf)
+{
xmlC14NCtxPtr ctx;
- if(doc == NULL || buf == NULL) {
+ if ((doc == NULL) || (buf == NULL)) {
#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NNewCtx: pointer to document or output buffer is NULL\n");
+ "xmlC14NNewCtx: pointer to document or output buffer is NULL\n");
#endif
- return(NULL);
+ return (NULL);
}
/*
* Validate the encoding output buffer encoding
*/
- if(buf->encoder != NULL) {
+ if (buf->encoder != NULL) {
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NNewCtx: output buffer encoder != NULL but C14N requires UTF8 output\n");
- return(NULL);
+ "xmlC14NNewCtx: output buffer encoder != NULL but C14N requires UTF8 output\n");
+ return (NULL);
}
/*
* Validate the XML document encoding value, if provided.
*/
- if(doc->charset != XML_CHAR_ENCODING_UTF8) {
+ if (doc->charset != XML_CHAR_ENCODING_UTF8) {
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NNewCtx: source document not in UTF8\n");
- return(NULL);
- }
+ "xmlC14NNewCtx: source document not in UTF8\n");
+ return (NULL);
+ }
/*
* Allocate a new xmlC14NCtxPtr and fill the fields.
@@ -1156,14 +1199,14 @@
ctx = (xmlC14NCtxPtr) xmlMalloc(sizeof(xmlC14NCtx));
if (ctx == NULL) {
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NNewCtx: malloc failed\n");
- return(NULL);
+ "xmlC14NNewCtx: malloc failed\n");
+ return (NULL);
}
memset(ctx, 0, sizeof(xmlC14NCtx));
/*
* initialize C14N context
- */
+ */
ctx->doc = doc;
ctx->with_comments = with_comments;
ctx->visible_nodes = nodes;
@@ -1175,12 +1218,12 @@
* Set "exclusive" flag, create a nodes set for namespaces
* stack and remember list of incluseve prefixes
*/
- if(exclusive) {
- ctx->exclusive = 1;
- ctx->ns_rendered = xmlXPathNodeSetCreate(NULL);
+ if (exclusive) {
+ ctx->exclusive = 1;
+ ctx->ns_rendered = xmlXPathNodeSetCreate(NULL);
ctx->inclusive_ns_prefixes = inclusive_ns_prefixes;
}
- return(ctx);
+ return (ctx);
}
/**
@@ -1206,36 +1249,36 @@
* Returns non-negative value on success or a negative value on fail
*/
int
-xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int exclusive, xmlChar **inclusive_ns_prefixes,
- int with_comments,
- xmlOutputBufferPtr buf) {
+xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, xmlOutputBufferPtr buf)
+{
xmlC14NCtxPtr ctx;
int ret;
-
- if(buf == NULL || doc == NULL) {
-#ifdef DEBUG_C14N
+
+ if ((buf == NULL) || (doc == NULL)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSaveTo: null return buffer or doc pointer\n");
-#endif
- return(-1);
+ "xmlC14NDocSaveTo: null return buffer or doc pointer\n");
+#endif
+ return (-1);
}
/*
* Validate the encoding output buffer encoding
*/
- if(buf->encoder != NULL) {
+ if (buf->encoder != NULL) {
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSaveTo: output buffer encoder != NULL but C14N requires UTF8 output\n");
- return(-1);
+ "xmlC14NDocSaveTo: output buffer encoder != NULL but C14N requires UTF8 output\n");
+ return (-1);
}
ctx = xmlC14NNewCtx(doc, nodes, exclusive, inclusive_ns_prefixes,
- with_comments, buf);
- if(ctx == NULL) {
+ with_comments, buf);
+ if (ctx == NULL) {
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSaveTo: unable to create C14N context\n");
- return(-1);
+ "xmlC14NDocSaveTo: unable to create C14N context\n");
+ return (-1);
}
@@ -1248,36 +1291,36 @@
* XML declaration, nor anything from within the document type
* declaration.
*/
- if(doc->children != NULL) {
- ret = xmlC14NProcessNodeList(ctx, doc->children);
- if(ret < 0) {
-#ifdef DEBUG_C14N
- xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSaveTo: process childrens' list failed.\n");
-#endif
- xmlC14NFreeCtx(ctx);
- return(-1);
- }
- }
-
+ if (doc->children != NULL) {
+ ret = xmlC14NProcessNodeList(ctx, doc->children);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocSaveTo: process childrens' list failed.\n");
+#endif
+ xmlC14NFreeCtx(ctx);
+ return (-1);
+ }
+ }
+
/*
* Flush buffer to get number of bytes written
*/
ret = xmlOutputBufferFlush(buf);
- if(ret < 0) {
-#ifdef DEBUG_C14N
+ if (ret < 0) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSaveTo: buffer flush failed.\n");
-#endif
- xmlC14NFreeCtx(ctx);
- return(-1);
+ "xmlC14NDocSaveTo: buffer flush failed.\n");
+#endif
+ xmlC14NFreeCtx(ctx);
+ return (-1);
}
/*
* Cleanup
*/
- xmlC14NFreeCtx(ctx);
- return(ret);
+ xmlC14NFreeCtx(ctx);
+ return (ret);
}
/**
@@ -1303,63 +1346,63 @@
* Returns the number of bytes written on success or a negative value on fail
*/
int
-xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int exclusive, xmlChar **inclusive_ns_prefixes,
- int with_comments,
- xmlChar **doc_txt_ptr) {
+xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, xmlChar ** doc_txt_ptr)
+{
int ret;
xmlOutputBufferPtr buf;
if (doc_txt_ptr == NULL) {
-#ifdef DEBUG_C14N
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocDumpMemory: null return buffer pointer\n");
-#endif
- return(-1);
+ "xmlC14NDocDumpMemory: null return buffer pointer\n");
+#endif
+ return (-1);
}
*doc_txt_ptr = NULL;
-
+
/*
* create memory buffer with UTF8 (default) encoding
*/
buf = xmlAllocOutputBuffer(NULL);
- if(buf == NULL ) {
-#ifdef DEBUG_C14N
+ if (buf == NULL) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocDumpMemory: failed to allocate output buffer.\n");
-#endif
- return(-1);
+ "xmlC14NDocDumpMemory: failed to allocate output buffer.\n");
+#endif
+ return (-1);
}
/*
* canonize document and write to buffer
*/
- ret = xmlC14NDocSaveTo(doc, nodes, exclusive, inclusive_ns_prefixes,
- with_comments, buf);
- if(ret < 0) {
-#ifdef DEBUG_C14N
+ ret = xmlC14NDocSaveTo(doc, nodes, exclusive, inclusive_ns_prefixes,
+ with_comments, buf);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocDumpMemory: xmlC14NDocSaveTo failed.\n");
-#endif
- (void)xmlOutputBufferClose(buf);
- return(-1);
- }
-
- ret = buf->buffer->use;
- if(ret > 0) {
- *doc_txt_ptr = xmlStrndup(buf->buffer->content, ret);
+ "xmlC14NDocDumpMemory: xmlC14NDocSaveTo failed.\n");
+#endif
+ (void) xmlOutputBufferClose(buf);
+ return (-1);
}
- (void)xmlOutputBufferClose(buf);
- if(*doc_txt_ptr == NULL && ret > 0) {
-#ifdef DEBUG_C14N
+ ret = buf->buffer->use;
+ if (ret > 0) {
+ *doc_txt_ptr = xmlStrndup(buf->buffer->content, ret);
+ }
+ (void) xmlOutputBufferClose(buf);
+
+ if ((*doc_txt_ptr == NULL) && (ret > 0)) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocDumpMemory: failed to allocate memory for document text representation\n");
-#endif
- return(-1);
+ "xmlC14NDocDumpMemory: failed to allocate memory for document text representation\n");
+#endif
+ return (-1);
}
- return(ret);
+ return (ret);
}
/**
@@ -1387,56 +1430,57 @@
* Returns the number of bytes written success or a negative value on fail
*/
int
-xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int exclusive, xmlChar **inclusive_ns_prefixes,
- int with_comments,
- const char* filename, int compression) {
- xmlOutputBufferPtr buf;
+xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, const char *filename, int compression)
+{
+ xmlOutputBufferPtr buf;
int ret;
- if(filename == NULL) {
-#ifdef DEBUG_C14N
+ if (filename == NULL) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSave: filename is NULL\n");
-#endif
- return(-1);
+ "xmlC14NDocSave: filename is NULL\n");
+#endif
+ return (-1);
}
-
#ifdef HAVE_ZLIB_H
- if(compression < 0) compression = xmlGetCompressMode();
-#endif
+ if (compression < 0)
+ compression = xmlGetCompressMode();
+#endif
/*
* save the content to a temp buffer, use default UTF8 encoding.
*/
buf = xmlOutputBufferCreateFilename(filename, NULL, compression);
if (buf == NULL) {
-#ifdef DEBUG_C14N
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSave: unable to create buffer for file=\"%s\" with compressin=%d\n", filename, compression);
-#endif
- return(-1);
+ "xmlC14NDocSave: unable to create buffer for file=\"%s\" with compressin=%d\n",
+ filename, compression);
+#endif
+ return (-1);
}
-
+
/*
* canonize document and write to buffer
*/
- ret = xmlC14NDocSaveTo(doc, nodes, exclusive, inclusive_ns_prefixes,
- with_comments, buf);
- if(ret < 0) {
-#ifdef DEBUG_C14N
+ ret = xmlC14NDocSaveTo(doc, nodes, exclusive, inclusive_ns_prefixes,
+ with_comments, buf);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
xmlGenericError(xmlGenericErrorContext,
- "xmlC14NDocSave: xmlC14NDocSaveTo failed.\n");
-#endif
- (void)xmlOutputBufferClose(buf);
- return(-1);
+ "xmlC14NDocSave: xmlC14NDocSaveTo failed.\n");
+#endif
+ (void) xmlOutputBufferClose(buf);
+ return (-1);
}
-
+
/*
* get the numbers of bytes written
*/
ret = xmlOutputBufferClose(buf);
- return(ret);
+ return (ret);
}
@@ -1467,13 +1511,16 @@
* or NULL if an error occurs
*/
static xmlChar *
-xmlC11NNormalizeString(const xmlChar *input, xmlC14NNormalizationMode mode) {
+xmlC11NNormalizeString(const xmlChar * input,
+ xmlC14NNormalizationMode mode)
+{
const xmlChar *cur = input;
xmlChar *buffer = NULL;
xmlChar *out = NULL;
int buffer_size = 0;
- if (input == NULL) return(NULL);
+ if (input == NULL)
+ return (NULL);
/*
* allocate an translation buffer.
@@ -1481,76 +1528,75 @@
buffer_size = 1000;
buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar));
if (buffer == NULL) {
- perror("malloc failed");
- return(NULL);
+ perror("malloc failed");
+ return (NULL);
}
out = buffer;
while (*cur != '\0') {
- if (out - buffer > buffer_size - 10) {
- int indx = out - buffer;
+ if ((out - buffer) > (buffer_size - 10)) {
+ int indx = out - buffer;
- growBufferReentrant();
- out = &buffer[indx];
- }
+ growBufferReentrant();
+ out = &buffer[indx];
+ }
- if (*cur == '<' && (mode == XMLC14N_NORMALIZE_ATTR ||
- mode == XMLC14N_NORMALIZE_TEXT)) {
- *out++ = '&';
- *out++ = 'l';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '>' && (mode == XMLC14N_NORMALIZE_TEXT)) {
- *out++ = '&';
- *out++ = 'g';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '&' && (mode == XMLC14N_NORMALIZE_ATTR ||
- mode == XMLC14N_NORMALIZE_TEXT)) {
- *out++ = '&';
- *out++ = 'a';
- *out++ = 'm';
- *out++ = 'p';
- *out++ = ';';
- } else if (*cur == '"' && (mode == XMLC14N_NORMALIZE_ATTR)) {
- *out++ = '&';
- *out++ = 'q';
- *out++ = 'u';
- *out++ = 'o';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '\x09' && (mode == XMLC14N_NORMALIZE_ATTR)) {
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- *out++ = '9';
- *out++ = ';';
- } else if (*cur == '\x0A' && (mode == XMLC14N_NORMALIZE_ATTR)) {
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- *out++ = 'A';
- *out++ = ';';
- } else if (*cur == '\x0D' && (mode == XMLC14N_NORMALIZE_ATTR ||
- mode == XMLC14N_NORMALIZE_TEXT ||
- mode == XMLC14N_NORMALIZE_COMMENT ||
- mode == XMLC14N_NORMALIZE_PI)) {
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- *out++ = 'D';
- *out++ = ';';
- } else {
- /*
- * Works because on UTF-8, all extended sequences cannot
- * result in bytes in the ASCII range.
- */
- *out++ = *cur;
- }
- cur++;
+ if ((*cur == '<') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
+ (mode == XMLC14N_NORMALIZE_TEXT))) {
+ *out++ = '&';
+ *out++ = 'l';
+ *out++ = 't';
+ *out++ = ';';
+ } else if ((*cur == '>') && (mode == XMLC14N_NORMALIZE_TEXT)) {
+ *out++ = '&';
+ *out++ = 'g';
+ *out++ = 't';
+ *out++ = ';';
+ } else if ((*cur == '&') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
+ (mode == XMLC14N_NORMALIZE_TEXT))) {
+ *out++ = '&';
+ *out++ = 'a';
+ *out++ = 'm';
+ *out++ = 'p';
+ *out++ = ';';
+ } else if ((*cur == '"') && (mode == XMLC14N_NORMALIZE_ATTR)) {
+ *out++ = '&';
+ *out++ = 'q';
+ *out++ = 'u';
+ *out++ = 'o';
+ *out++ = 't';
+ *out++ = ';';
+ } else if ((*cur == '\x09') && (mode == XMLC14N_NORMALIZE_ATTR)) {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = 'x';
+ *out++ = '9';
+ *out++ = ';';
+ } else if ((*cur == '\x0A') && (mode == XMLC14N_NORMALIZE_ATTR)) {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = 'x';
+ *out++ = 'A';
+ *out++ = ';';
+ } else if ((*cur == '\x0D') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
+ (mode == XMLC14N_NORMALIZE_TEXT) ||
+ (mode == XMLC14N_NORMALIZE_COMMENT) ||
+ (mode == XMLC14N_NORMALIZE_PI))) {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = 'x';
+ *out++ = 'D';
+ *out++ = ';';
+ } else {
+ /*
+ * Works because on UTF-8, all extended sequences cannot
+ * result in bytes in the ASCII range.
+ */
+ *out++ = *cur;
+ }
+ cur++;
}
*out++ = 0;
- return(buffer);
+ return (buffer);
}
-
#endif /* LIBXML_C14N_ENABLED */