| Index: third_party/libxml/xpath.c
|
| diff --git a/third_party/libxml/xpath.c b/third_party/libxml/xpath.c
|
| index a52c44aa10797cf878fe44f4c687c9caefe8192a..8482c40b958c2def92e4de1533c05332abefe06a 100644
|
| --- a/third_party/libxml/xpath.c
|
| +++ b/third_party/libxml/xpath.c
|
| @@ -59,7 +59,7 @@
|
| #define XPATH_STREAMING
|
| #endif
|
|
|
| -#define TODO \
|
| +#define TODO \
|
| xmlGenericError(xmlGenericErrorContext, \
|
| "Unimplemented block at %s:%d\n", \
|
| __FILE__, __LINE__);
|
| @@ -79,7 +79,7 @@
|
| * XP_OPTIMIZED_FILTER_FIRST:
|
| * If defined, this will optimize expressions like "key('foo', 'val')[b][1]"
|
| * in a way, that it stop evaluation at the first node.
|
| -*/
|
| +*/
|
| #define XP_OPTIMIZED_FILTER_FIRST
|
|
|
| /*
|
| @@ -99,9 +99,9 @@
|
| #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
|
|
|
| /************************************************************************
|
| - * *
|
| - * Floating point stuff *
|
| - * *
|
| + * *
|
| + * Floating point stuff *
|
| + * *
|
| ************************************************************************/
|
|
|
| #ifndef TRIO_REPLACE_STDIO
|
| @@ -142,7 +142,7 @@ xmlXPathInit(void) {
|
| * Provides a portable isnan() function to detect whether a double
|
| * is a NotaNumber. Based on trio code
|
| * http://sourceforge.net/projects/ctrio/
|
| - *
|
| + *
|
| * Returns 1 if the value is a NaN, 0 otherwise
|
| */
|
| int
|
| @@ -157,7 +157,7 @@ xmlXPathIsNaN(double val) {
|
| * Provides a portable isinf() function to detect whether a double
|
| * is a +Infinite or -Infinite. Based on trio code
|
| * http://sourceforge.net/projects/ctrio/
|
| - *
|
| + *
|
| * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise
|
| */
|
| int
|
| @@ -174,7 +174,7 @@ xmlXPathIsInf(double val) {
|
| * Provides a portable function to detect the sign of a double
|
| * Modified from trio code
|
| * http://sourceforge.net/projects/ctrio/
|
| - *
|
| + *
|
| * Returns 1 if the value is Negative, 0 if positive
|
| */
|
| static int
|
| @@ -187,11 +187,11 @@ xmlXPathGetSign(double val) {
|
| * TODO: when compatibility allows remove all "fake node libxslt" strings
|
| * the test should just be name[0] = ' '
|
| */
|
| -/* #define DEBUG */
|
| -/* #define DEBUG_STEP */
|
| -/* #define DEBUG_STEP_NTH */
|
| -/* #define DEBUG_EXPR */
|
| -/* #define DEBUG_EVAL_COUNTS */
|
| +#ifdef DEBUG_XPATH_EXPRESSION
|
| +#define DEBUG_STEP
|
| +#define DEBUG_EXPR
|
| +#define DEBUG_EVAL_COUNTS
|
| +#endif
|
|
|
| static xmlNs xmlXPathXMLNamespaceStruct = {
|
| NULL,
|
| @@ -203,7 +203,7 @@ static xmlNs xmlXPathXMLNamespaceStruct = {
|
| };
|
| static xmlNsPtr xmlXPathXMLNamespace = &xmlXPathXMLNamespaceStruct;
|
| #ifndef LIBXML_THREAD_ENABLED
|
| -/*
|
| +/*
|
| * Optimizer is disabled only when threaded apps are detected while
|
| * the library ain't compiled for thread safety.
|
| */
|
| @@ -334,7 +334,7 @@ xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
|
| error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
|
| XML_ERR_ERROR, NULL, 0,
|
| NULL, NULL, NULL, 0, 0,
|
| - xmlXPathErrorMessages[error]);
|
| + "%s", xmlXPathErrorMessages[error]);
|
| return;
|
| }
|
| ctxt->error = error;
|
| @@ -345,12 +345,12 @@ xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
|
| XML_ERR_ERROR, NULL, 0,
|
| (const char *) ctxt->base, NULL, NULL,
|
| ctxt->cur - ctxt->base, 0,
|
| - xmlXPathErrorMessages[error]);
|
| + "%s", xmlXPathErrorMessages[error]);
|
| return;
|
| }
|
|
|
| /* cleanup current last error */
|
| - xmlResetError(&ctxt->context->lastError);
|
| + xmlResetError(&ctxt->context->lastError);
|
|
|
| ctxt->context->lastError.domain = XML_FROM_XPATH;
|
| ctxt->context->lastError.code = error + XML_XPATH_EXPRESSION_OK -
|
| @@ -369,7 +369,7 @@ xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
|
| XML_ERR_ERROR, NULL, 0,
|
| (const char *) ctxt->base, NULL, NULL,
|
| ctxt->cur - ctxt->base, 0,
|
| - xmlXPathErrorMessages[error]);
|
| + "%s", xmlXPathErrorMessages[error]);
|
| }
|
|
|
| }
|
| @@ -390,9 +390,9 @@ xmlXPatherror(xmlXPathParserContextPtr ctxt, const char *file ATTRIBUTE_UNUSED,
|
| }
|
|
|
| /************************************************************************
|
| - * *
|
| - * Utilities *
|
| - * *
|
| + * *
|
| + * Utilities *
|
| + * *
|
| ************************************************************************/
|
|
|
| /**
|
| @@ -412,7 +412,7 @@ struct _xmlPointerList {
|
| * and here, we should make the functions public.
|
| */
|
| static int
|
| -xmlPointerListAddSize(xmlPointerListPtr list,
|
| +xmlPointerListAddSize(xmlPointerListPtr list,
|
| void *item,
|
| int initialSize)
|
| {
|
| @@ -486,9 +486,9 @@ xmlPointerListFree(xmlPointerListPtr list)
|
| }
|
|
|
| /************************************************************************
|
| - * *
|
| - * Parser Types *
|
| - * *
|
| + * *
|
| + * Parser Types *
|
| + * *
|
| ************************************************************************/
|
|
|
| /*
|
| @@ -533,7 +533,7 @@ typedef enum {
|
| AXIS_PARENT,
|
| AXIS_PRECEDING,
|
| AXIS_PRECEDING_SIBLING,
|
| - AXIS_SELF
|
| + AXIS_SELF
|
| } xmlXPathAxisVal;
|
|
|
| typedef enum {
|
| @@ -549,7 +549,7 @@ typedef enum {
|
| NODE_TYPE_NODE = 0,
|
| NODE_TYPE_COMMENT = XML_COMMENT_NODE,
|
| NODE_TYPE_TEXT = XML_TEXT_NODE,
|
| - NODE_TYPE_PI = XML_PI_NODE
|
| + NODE_TYPE_PI = XML_PI_NODE
|
| } xmlXPathTypeVal;
|
|
|
| #define XP_REWRITE_DOS_CHILD_ELEM 1
|
| @@ -587,9 +587,9 @@ struct _xmlXPathCompExpr {
|
| };
|
|
|
| /************************************************************************
|
| - * *
|
| - * Forward declarations *
|
| - * *
|
| + * *
|
| + * Forward declarations *
|
| + * *
|
| ************************************************************************/
|
| static void
|
| xmlXPathFreeValueTree(xmlNodeSetPtr obj);
|
| @@ -604,9 +604,9 @@ xmlXPathCompOpEvalToBoolean(xmlXPathParserContextPtr ctxt,
|
| int isPredicate);
|
|
|
| /************************************************************************
|
| - * *
|
| - * Parser Type functions *
|
| - * *
|
| + * *
|
| + * Parser Type functions *
|
| + * *
|
| ************************************************************************/
|
|
|
| /**
|
| @@ -796,19 +796,19 @@ xmlXPathCompSwap(xmlXPathStepOpPtr op) {
|
| xmlXPathCompExprAdd(ctxt->comp, ctxt->comp->last, -1, \
|
| (op), (val), (val2), (val3), (val4), (val5))
|
|
|
| -#define PUSH_LEAVE_EXPR(op, val, val2) \
|
| +#define PUSH_LEAVE_EXPR(op, val, val2) \
|
| xmlXPathCompExprAdd(ctxt->comp, -1, -1, (op), (val), (val2), 0 ,NULL ,NULL)
|
|
|
| -#define PUSH_UNARY_EXPR(op, ch, val, val2) \
|
| +#define PUSH_UNARY_EXPR(op, ch, val, val2) \
|
| xmlXPathCompExprAdd(ctxt->comp, (ch), -1, (op), (val), (val2), 0 ,NULL ,NULL)
|
|
|
| -#define PUSH_BINARY_EXPR(op, ch1, ch2, val, val2) \
|
| +#define PUSH_BINARY_EXPR(op, ch1, ch2, val, val2) \
|
| xmlXPathCompExprAdd(ctxt->comp, (ch1), (ch2), (op), \
|
| (val), (val2), 0 ,NULL ,NULL)
|
|
|
| /************************************************************************
|
| * *
|
| - * XPath object cache structures *
|
| + * XPath object cache structures *
|
| * *
|
| ************************************************************************/
|
|
|
| @@ -840,8 +840,8 @@ struct _xmlXPathContextCache {
|
| int dbgCachedLocset;
|
| int dbgCachedUsers;
|
| int dbgCachedXSLTTree;
|
| - int dbgCachedUndefined;
|
| -
|
| + int dbgCachedUndefined;
|
| +
|
|
|
| int dbgReusedAll;
|
| int dbgReusedNodeset;
|
| @@ -860,11 +860,11 @@ struct _xmlXPathContextCache {
|
|
|
| /************************************************************************
|
| * *
|
| - * Debugging related functions *
|
| + * Debugging related functions *
|
| * *
|
| ************************************************************************/
|
|
|
| -#define STRANGE \
|
| +#define STRANGE \
|
| xmlGenericError(xmlGenericErrorContext, \
|
| "Internal error at %s:%d\n", \
|
| __FILE__, __LINE__);
|
| @@ -879,15 +879,15 @@ xmlXPathDebugDumpNode(FILE *output, xmlNodePtr cur, int depth) {
|
| shift[2 * i] = shift[2 * i + 1] = ' ';
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
| if (cur == NULL) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "Node is NULL !\n");
|
| return;
|
| -
|
| +
|
| }
|
|
|
| if ((cur->type == XML_DOCUMENT_NODE) ||
|
| (cur->type == XML_HTML_DOCUMENT_NODE)) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, " /\n");
|
| } else if (cur->type == XML_ATTRIBUTE_NODE)
|
| xmlDebugDumpAttr(output, (xmlAttrPtr)cur, depth);
|
| @@ -904,10 +904,10 @@ xmlXPathDebugDumpNodeList(FILE *output, xmlNodePtr cur, int depth) {
|
| shift[2 * i] = shift[2 * i + 1] = ' ';
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
| if (cur == NULL) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "Node is NULL !\n");
|
| return;
|
| -
|
| +
|
| }
|
|
|
| while (cur != NULL) {
|
| @@ -927,16 +927,16 @@ xmlXPathDebugDumpNodeSet(FILE *output, xmlNodeSetPtr cur, int depth) {
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
|
|
| if (cur == NULL) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "NodeSet is NULL !\n");
|
| return;
|
| -
|
| +
|
| }
|
|
|
| if (cur != NULL) {
|
| fprintf(output, "Set contains %d nodes:\n", cur->nodeNr);
|
| for (i = 0;i < cur->nodeNr;i++) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "%d", i + 1);
|
| xmlXPathDebugDumpNode(output, cur->nodeTab[i], depth + 1);
|
| }
|
| @@ -953,13 +953,13 @@ xmlXPathDebugDumpValueTree(FILE *output, xmlNodeSetPtr cur, int depth) {
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
|
|
| if ((cur == NULL) || (cur->nodeNr == 0) || (cur->nodeTab[0] == NULL)) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "Value Tree is NULL !\n");
|
| return;
|
| -
|
| +
|
| }
|
|
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "%d", i + 1);
|
| xmlXPathDebugDumpNodeList(output, cur->nodeTab[0]->children, depth + 1);
|
| }
|
| @@ -974,14 +974,14 @@ xmlXPathDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth) {
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
|
|
| if (cur == NULL) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "LocationSet is NULL !\n");
|
| return;
|
| -
|
| +
|
| }
|
|
|
| for (i = 0;i < cur->locNr;i++) {
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "%d : ", i + 1);
|
| xmlXPathDebugDumpObject(output, cur->locTab[i], depth + 1);
|
| }
|
| @@ -1008,7 +1008,7 @@ xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
|
|
|
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
|
|
| if (cur == NULL) {
|
| fprintf(output, "Object is empty (NULL)\n");
|
| @@ -1063,7 +1063,7 @@ xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
|
| if ((cur->user2 == NULL) ||
|
| ((cur->user2 == cur->user) && (cur->index == cur->index2))) {
|
| fprintf(output, "Object is a collapsed range :\n");
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| if (cur->index >= 0)
|
| fprintf(output, "index %d in ", cur->index);
|
| fprintf(output, "node\n");
|
| @@ -1071,14 +1071,14 @@ xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
|
| depth + 1);
|
| } else {
|
| fprintf(output, "Object is a range :\n");
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "From ");
|
| if (cur->index >= 0)
|
| fprintf(output, "index %d in ", cur->index);
|
| fprintf(output, "node\n");
|
| xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user,
|
| depth + 1);
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| fprintf(output, "To ");
|
| if (cur->index2 >= 0)
|
| fprintf(output, "index %d in ", cur->index2);
|
| @@ -1111,7 +1111,7 @@ xmlXPathDebugDumpStepOp(FILE *output, xmlXPathCompExprPtr comp,
|
| shift[2 * i] = shift[2 * i + 1] = ' ';
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
|
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
| if (op == NULL) {
|
| fprintf(output, "Step is NULL\n");
|
| return;
|
| @@ -1298,7 +1298,7 @@ xmlXPathDebugDumpCompExpr(FILE *output, xmlXPathCompExprPtr comp,
|
| shift[2 * i] = shift[2 * i + 1] = ' ';
|
| shift[2 * i] = shift[2 * i + 1] = 0;
|
|
|
| - fprintf(output, shift);
|
| + fprintf(output, "%s", shift);
|
|
|
| fprintf(output, "Compiled Expression : %d elements\n",
|
| comp->nbStep);
|
| @@ -1333,7 +1333,7 @@ static int xmlXPathDebugObjTotalRange = 0;
|
| static int xmlXPathDebugObjTotalLocset = 0;
|
| static int xmlXPathDebugObjTotalUsers = 0;
|
| static int xmlXPathDebugObjTotalXSLTTree = 0;
|
| -static int xmlXPathDebugObjTotalAll = 0;
|
| +static int xmlXPathDebugObjTotalAll = 0;
|
|
|
| static int xmlXPathDebugObjMaxUndefined = 0;
|
| static int xmlXPathDebugObjMaxNodeset = 0;
|
| @@ -1366,7 +1366,7 @@ xmlXPathDebugObjUsageReset(xmlXPathContextPtr ctxt)
|
| cache->dbgCachedLocset = 0;
|
| cache->dbgCachedUsers = 0;
|
| cache->dbgCachedXSLTTree = 0;
|
| - cache->dbgCachedUndefined = 0;
|
| + cache->dbgCachedUndefined = 0;
|
|
|
| cache->dbgReusedAll = 0;
|
| cache->dbgReusedNodeset = 0;
|
| @@ -1380,7 +1380,7 @@ xmlXPathDebugObjUsageReset(xmlXPathContextPtr ctxt)
|
| cache->dbgReusedXSLTTree = 0;
|
| cache->dbgReusedUndefined = 0;
|
| }
|
| - }
|
| + }
|
|
|
| xmlXPathDebugObjCounterUndefined = 0;
|
| xmlXPathDebugObjCounterNodeset = 0;
|
| @@ -1393,7 +1393,7 @@ xmlXPathDebugObjUsageReset(xmlXPathContextPtr ctxt)
|
| xmlXPathDebugObjCounterUsers = 0;
|
| xmlXPathDebugObjCounterXSLTTree = 0;
|
| xmlXPathDebugObjCounterAll = 0;
|
| -
|
| +
|
| xmlXPathDebugObjTotalUndefined = 0;
|
| xmlXPathDebugObjTotalNodeset = 0;
|
| xmlXPathDebugObjTotalBool = 0;
|
| @@ -1404,7 +1404,7 @@ xmlXPathDebugObjUsageReset(xmlXPathContextPtr ctxt)
|
| xmlXPathDebugObjTotalLocset = 0;
|
| xmlXPathDebugObjTotalUsers = 0;
|
| xmlXPathDebugObjTotalXSLTTree = 0;
|
| - xmlXPathDebugObjTotalAll = 0;
|
| + xmlXPathDebugObjTotalAll = 0;
|
|
|
| xmlXPathDebugObjMaxUndefined = 0;
|
| xmlXPathDebugObjMaxNodeset = 0;
|
| @@ -1430,10 +1430,10 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| if (ctxt->cache != NULL) {
|
| xmlXPathContextCachePtr cache =
|
| (xmlXPathContextCachePtr) ctxt->cache;
|
| -
|
| +
|
| isCached = 1;
|
| -
|
| - cache->dbgReusedAll++;
|
| +
|
| + cache->dbgReusedAll++;
|
| switch (objType) {
|
| case XPATH_UNDEFINED:
|
| cache->dbgReusedUndefined++;
|
| @@ -1467,7 +1467,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| break;
|
| default:
|
| break;
|
| - }
|
| + }
|
| }
|
| }
|
|
|
| @@ -1475,7 +1475,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_UNDEFINED:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalUndefined++;
|
| - xmlXPathDebugObjCounterUndefined++;
|
| + xmlXPathDebugObjCounterUndefined++;
|
| if (xmlXPathDebugObjCounterUndefined >
|
| xmlXPathDebugObjMaxUndefined)
|
| xmlXPathDebugObjMaxUndefined =
|
| @@ -1484,7 +1484,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_NODESET:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalNodeset++;
|
| - xmlXPathDebugObjCounterNodeset++;
|
| + xmlXPathDebugObjCounterNodeset++;
|
| if (xmlXPathDebugObjCounterNodeset >
|
| xmlXPathDebugObjMaxNodeset)
|
| xmlXPathDebugObjMaxNodeset =
|
| @@ -1493,7 +1493,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_BOOLEAN:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalBool++;
|
| - xmlXPathDebugObjCounterBool++;
|
| + xmlXPathDebugObjCounterBool++;
|
| if (xmlXPathDebugObjCounterBool >
|
| xmlXPathDebugObjMaxBool)
|
| xmlXPathDebugObjMaxBool =
|
| @@ -1502,7 +1502,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_NUMBER:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalNumber++;
|
| - xmlXPathDebugObjCounterNumber++;
|
| + xmlXPathDebugObjCounterNumber++;
|
| if (xmlXPathDebugObjCounterNumber >
|
| xmlXPathDebugObjMaxNumber)
|
| xmlXPathDebugObjMaxNumber =
|
| @@ -1511,7 +1511,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_STRING:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalString++;
|
| - xmlXPathDebugObjCounterString++;
|
| + xmlXPathDebugObjCounterString++;
|
| if (xmlXPathDebugObjCounterString >
|
| xmlXPathDebugObjMaxString)
|
| xmlXPathDebugObjMaxString =
|
| @@ -1520,7 +1520,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_POINT:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalPoint++;
|
| - xmlXPathDebugObjCounterPoint++;
|
| + xmlXPathDebugObjCounterPoint++;
|
| if (xmlXPathDebugObjCounterPoint >
|
| xmlXPathDebugObjMaxPoint)
|
| xmlXPathDebugObjMaxPoint =
|
| @@ -1547,7 +1547,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_USERS:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalUsers++;
|
| - xmlXPathDebugObjCounterUsers++;
|
| + xmlXPathDebugObjCounterUsers++;
|
| if (xmlXPathDebugObjCounterUsers >
|
| xmlXPathDebugObjMaxUsers)
|
| xmlXPathDebugObjMaxUsers =
|
| @@ -1556,7 +1556,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
| case XPATH_XSLT_TREE:
|
| if (! isCached)
|
| xmlXPathDebugObjTotalXSLTTree++;
|
| - xmlXPathDebugObjCounterXSLTTree++;
|
| + xmlXPathDebugObjCounterXSLTTree++;
|
| if (xmlXPathDebugObjCounterXSLTTree >
|
| xmlXPathDebugObjMaxXSLTTree)
|
| xmlXPathDebugObjMaxXSLTTree =
|
| @@ -1585,8 +1585,8 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
| xmlXPathContextCachePtr cache =
|
| (xmlXPathContextCachePtr) ctxt->cache;
|
|
|
| - isCached = 1;
|
| -
|
| + isCached = 1;
|
| +
|
| cache->dbgCachedAll++;
|
| switch (objType) {
|
| case XPATH_UNDEFINED:
|
| @@ -1622,7 +1622,7 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
| default:
|
| break;
|
| }
|
| -
|
| +
|
| }
|
| }
|
| switch (objType) {
|
| @@ -1658,7 +1658,7 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
| break;
|
| default:
|
| break;
|
| - }
|
| + }
|
| xmlXPathDebugObjCounterAll--;
|
| }
|
|
|
| @@ -1681,7 +1681,7 @@ xmlXPathDebugObjUsageDisplay(xmlXPathContextPtr ctxt)
|
| reqNumber = xmlXPathDebugObjTotalNumber;
|
| reqXSLTTree = xmlXPathDebugObjTotalXSLTTree;
|
| reqUndefined = xmlXPathDebugObjTotalUndefined;
|
| -
|
| +
|
| printf("# XPath object usage:\n");
|
|
|
| if (ctxt != NULL) {
|
| @@ -1703,7 +1703,7 @@ xmlXPathDebugObjUsageDisplay(xmlXPathContextPtr ctxt)
|
| reqXSLTTree += reXSLTTree;
|
| reUndefined = cache->dbgReusedUndefined;
|
| reqUndefined += reUndefined;
|
| -
|
| +
|
| caAll = cache->dbgCachedAll;
|
| caBool = cache->dbgCachedBool;
|
| caNodeset = cache->dbgCachedNodeset;
|
| @@ -1711,7 +1711,7 @@ xmlXPathDebugObjUsageDisplay(xmlXPathContextPtr ctxt)
|
| caNumber = cache->dbgCachedNumber;
|
| caXSLTTree = cache->dbgCachedXSLTTree;
|
| caUndefined = cache->dbgCachedUndefined;
|
| -
|
| +
|
| if (cache->nodesetObjs)
|
| leftObjs -= cache->nodesetObjs->number;
|
| if (cache->stringObjs)
|
| @@ -1724,8 +1724,8 @@ xmlXPathDebugObjUsageDisplay(xmlXPathContextPtr ctxt)
|
| leftObjs -= cache->miscObjs->number;
|
| }
|
| }
|
| -
|
| - printf("# all\n");
|
| +
|
| + printf("# all\n");
|
| printf("# total : %d\n", reqAll);
|
| printf("# left : %d\n", leftObjs);
|
| printf("# created: %d\n", xmlXPathDebugObjTotalAll);
|
| @@ -1848,7 +1848,7 @@ xmlXPathFreeCache(xmlXPathContextCachePtr cache)
|
| if (cache->numberObjs)
|
| xmlXPathCacheFreeObjectList(cache->numberObjs);
|
| if (cache->miscObjs)
|
| - xmlXPathCacheFreeObjectList(cache->miscObjs);
|
| + xmlXPathCacheFreeObjectList(cache->miscObjs);
|
| xmlFree(cache);
|
| }
|
|
|
| @@ -1857,7 +1857,7 @@ xmlXPathFreeCache(xmlXPathContextCachePtr cache)
|
| *
|
| * @ctxt: the XPath context
|
| * @active: enables/disables (creates/frees) the cache
|
| - * @value: a value with semantics dependant on @options
|
| + * @value: a value with semantics dependant on @options
|
| * @options: options (currently only the value 0 is used)
|
| *
|
| * Creates/frees an object cache on the XPath context.
|
| @@ -1884,7 +1884,7 @@ xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
|
| return(-1);
|
| if (active) {
|
| xmlXPathContextCachePtr cache;
|
| -
|
| +
|
| if (ctxt->cache == NULL) {
|
| ctxt->cache = xmlXPathNewCache();
|
| if (ctxt->cache == NULL)
|
| @@ -1919,7 +1919,7 @@ xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
|
| */
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheWrapNodeSet(xmlXPathContextPtr ctxt, xmlNodeSetPtr val)
|
| -{
|
| +{
|
| if ((ctxt != NULL) && (ctxt->cache != NULL)) {
|
| xmlXPathContextCachePtr cache =
|
| (xmlXPathContextCachePtr) ctxt->cache;
|
| @@ -1928,7 +1928,7 @@ xmlXPathCacheWrapNodeSet(xmlXPathContextPtr ctxt, xmlNodeSetPtr val)
|
| (cache->miscObjs->number != 0))
|
| {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| ret = (xmlXPathObjectPtr)
|
| cache->miscObjs->items[--cache->miscObjs->number];
|
| ret->type = XPATH_NODESET;
|
| @@ -1936,12 +1936,12 @@ xmlXPathCacheWrapNodeSet(xmlXPathContextPtr ctxt, xmlNodeSetPtr val)
|
| #ifdef XP_DEBUG_OBJ_USAGE
|
| xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET);
|
| #endif
|
| - return(ret);
|
| + return(ret);
|
| }
|
| }
|
| -
|
| +
|
| return(xmlXPathWrapNodeSet(val));
|
| -
|
| +
|
| }
|
|
|
| /**
|
| @@ -1956,16 +1956,16 @@ xmlXPathCacheWrapNodeSet(xmlXPathContextPtr ctxt, xmlNodeSetPtr val)
|
| */
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheWrapString(xmlXPathContextPtr ctxt, xmlChar *val)
|
| -{
|
| +{
|
| if ((ctxt != NULL) && (ctxt->cache != NULL)) {
|
| xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
|
|
|
| if ((cache->stringObjs != NULL) &&
|
| (cache->stringObjs->number != 0))
|
| {
|
| -
|
| +
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| ret = (xmlXPathObjectPtr)
|
| cache->stringObjs->items[--cache->stringObjs->number];
|
| ret->type = XPATH_STRING;
|
| @@ -2014,20 +2014,20 @@ xmlXPathCacheNewNodeSet(xmlXPathContextPtr ctxt, xmlNodePtr val)
|
|
|
| if ((cache->nodesetObjs != NULL) &&
|
| (cache->nodesetObjs->number != 0))
|
| - {
|
| + {
|
| xmlXPathObjectPtr ret;
|
| /*
|
| * Use the nodset-cache.
|
| - */
|
| + */
|
| ret = (xmlXPathObjectPtr)
|
| cache->nodesetObjs->items[--cache->nodesetObjs->number];
|
| ret->type = XPATH_NODESET;
|
| ret->boolval = 0;
|
| - if (val) {
|
| + if (val) {
|
| if ((ret->nodesetval->nodeMax == 0) ||
|
| (val->type == XML_NAMESPACE_DECL))
|
| {
|
| - xmlXPathNodeSetAddUnique(ret->nodesetval, val);
|
| + xmlXPathNodeSetAddUnique(ret->nodesetval, val);
|
| } else {
|
| ret->nodesetval->nodeTab[0] = val;
|
| ret->nodesetval->nodeNr = 1;
|
| @@ -2072,15 +2072,15 @@ xmlXPathCacheNewNodeSet(xmlXPathContextPtr ctxt, xmlNodePtr val)
|
| */
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheNewCString(xmlXPathContextPtr ctxt, const char *val)
|
| -{
|
| +{
|
| if ((ctxt != NULL) && (ctxt->cache)) {
|
| xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
|
|
|
| if ((cache->stringObjs != NULL) &&
|
| (cache->stringObjs->number != 0))
|
| - {
|
| + {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| ret = (xmlXPathObjectPtr)
|
| cache->stringObjs->items[--cache->stringObjs->number];
|
|
|
| @@ -2121,15 +2121,15 @@ xmlXPathCacheNewCString(xmlXPathContextPtr ctxt, const char *val)
|
| */
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheNewString(xmlXPathContextPtr ctxt, const xmlChar *val)
|
| -{
|
| +{
|
| if ((ctxt != NULL) && (ctxt->cache)) {
|
| xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
|
|
|
| if ((cache->stringObjs != NULL) &&
|
| (cache->stringObjs->number != 0))
|
| - {
|
| + {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| ret = (xmlXPathObjectPtr)
|
| cache->stringObjs->items[--cache->stringObjs->number];
|
| ret->type = XPATH_STRING;
|
| @@ -2175,15 +2175,15 @@ xmlXPathCacheNewString(xmlXPathContextPtr ctxt, const xmlChar *val)
|
| */
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheNewBoolean(xmlXPathContextPtr ctxt, int val)
|
| -{
|
| +{
|
| if ((ctxt != NULL) && (ctxt->cache)) {
|
| xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
|
|
|
| if ((cache->booleanObjs != NULL) &&
|
| (cache->booleanObjs->number != 0))
|
| - {
|
| + {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| ret = (xmlXPathObjectPtr)
|
| cache->booleanObjs->items[--cache->booleanObjs->number];
|
| ret->type = XPATH_BOOLEAN;
|
| @@ -2229,9 +2229,9 @@ xmlXPathCacheNewFloat(xmlXPathContextPtr ctxt, double val)
|
|
|
| if ((cache->numberObjs != NULL) &&
|
| (cache->numberObjs->number != 0))
|
| - {
|
| + {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| ret = (xmlXPathObjectPtr)
|
| cache->numberObjs->items[--cache->numberObjs->number];
|
| ret->type = XPATH_NUMBER;
|
| @@ -2273,7 +2273,7 @@ xmlXPathCacheNewFloat(xmlXPathContextPtr ctxt, double val)
|
|
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheConvertString(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
|
| - xmlChar *res = NULL;
|
| + xmlChar *res = NULL;
|
|
|
| if (val == NULL)
|
| return(xmlXPathCacheNewCString(ctxt, ""));
|
| @@ -2357,7 +2357,7 @@ xmlXPathCacheObjectCopy(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val)
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheConvertBoolean(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| if (val == NULL)
|
| return(xmlXPathCacheNewBoolean(ctxt, 0));
|
| if (val->type == XPATH_BOOLEAN)
|
| @@ -2381,7 +2381,7 @@ xmlXPathCacheConvertBoolean(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
|
| static xmlXPathObjectPtr
|
| xmlXPathCacheConvertNumber(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
|
| xmlXPathObjectPtr ret;
|
| -
|
| +
|
| if (val == NULL)
|
| return(xmlXPathCacheNewFloat(ctxt, 0.0));
|
| if (val->type == XPATH_NUMBER)
|
| @@ -2393,7 +2393,7 @@ xmlXPathCacheConvertNumber(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
|
|
|
| /************************************************************************
|
| * *
|
| - * Parser stacks related functions and macros *
|
| + * Parser stacks related functions and macros *
|
| * *
|
| ************************************************************************/
|
|
|
| @@ -2632,7 +2632,7 @@ xmlXPathPopExternal (xmlXPathParserContextPtr ctxt) {
|
|
|
| #define NEXTL(l) ctxt->cur += l
|
|
|
| -#define SKIP_BLANKS \
|
| +#define SKIP_BLANKS \
|
| while (IS_BLANK_CH(*(ctxt->cur))) NEXT
|
|
|
| #define CURRENT (*ctxt->cur)
|
| @@ -3001,17 +3001,17 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
|
|
| if (node1 == node2)
|
| return(0);
|
| -
|
| +
|
| /*
|
| * a couple of optimizations which will avoid computations in most cases
|
| - */
|
| + */
|
| switch (node1->type) {
|
| case XML_ELEMENT_NODE:
|
| if (node2->type == XML_ELEMENT_NODE) {
|
| if ((0 > (long) node1->content) && /* TODO: Would a != 0 suffice here? */
|
| (0 > (long) node2->content) &&
|
| (node1->doc == node2->doc))
|
| - {
|
| + {
|
| l1 = -((long) node1->content);
|
| l2 = -((long) node2->content);
|
| if (l1 < l2)
|
| @@ -3019,7 +3019,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| if (l1 > l2)
|
| return(-1);
|
| } else
|
| - goto turtle_comparison;
|
| + goto turtle_comparison;
|
| }
|
| break;
|
| case XML_ATTRIBUTE_NODE:
|
| @@ -3035,7 +3035,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| miscNode1 = node1;
|
| /*
|
| * Find nearest element node.
|
| - */
|
| + */
|
| if (node1->prev != NULL) {
|
| do {
|
| node1 = node1->prev;
|
| @@ -3075,9 +3075,9 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| return(1);
|
| default:
|
| break;
|
| - }
|
| + }
|
| switch (node2->type) {
|
| - case XML_ELEMENT_NODE:
|
| + case XML_ELEMENT_NODE:
|
| break;
|
| case XML_ATTRIBUTE_NODE:
|
| precedence2 = 1; /* element is owner */
|
| @@ -3106,7 +3106,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| } else {
|
| precedence2 = 2; /* element is parent */
|
| node2 = node2->parent;
|
| - }
|
| + }
|
| if ((node2 == NULL) || (node2->type != XML_ELEMENT_NODE) ||
|
| (0 <= (long) node1->content))
|
| {
|
| @@ -3144,11 +3144,11 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| * Is this 100% correct?
|
| */
|
| if (precedence1 < precedence2)
|
| - return(1);
|
| + return(1);
|
| else
|
| - return(-1);
|
| + return(-1);
|
| }
|
| - }
|
| + }
|
| /*
|
| * Special case: One of the helper-elements is contained by the other.
|
| * <foo>
|
| @@ -3157,7 +3157,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| * </node2>
|
| * Text-6(precedence2 == 3)
|
| * </foo>
|
| - */
|
| + */
|
| if ((precedence2 == 3) && (precedence1 > 1)) {
|
| cur = node1->parent;
|
| while (cur) {
|
| @@ -3166,7 +3166,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| cur = cur->parent;
|
| }
|
| }
|
| - if ((precedence1 == 3) && (precedence2 > 1)) {
|
| + if ((precedence1 == 3) && (precedence2 > 1)) {
|
| cur = node2->parent;
|
| while (cur) {
|
| if (cur == node1)
|
| @@ -3174,16 +3174,16 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
| cur = cur->parent;
|
| }
|
| }
|
| - }
|
| + }
|
|
|
| /*
|
| * Speedup using document order if availble.
|
| */
|
| - if ((node1->type == XML_ELEMENT_NODE) &&
|
| + if ((node1->type == XML_ELEMENT_NODE) &&
|
| (node2->type == XML_ELEMENT_NODE) &&
|
| (0 > (long) node1->content) &&
|
| (0 > (long) node2->content) &&
|
| - (node1->doc == node2->doc)) {
|
| + (node1->doc == node2->doc)) {
|
|
|
| l1 = -((long) node1->content);
|
| l2 = -((long) node2->content);
|
| @@ -3251,7 +3251,7 @@ turtle_comparison:
|
| (node2->type == XML_ELEMENT_NODE) &&
|
| (0 > (long) node1->content) &&
|
| (0 > (long) node2->content) &&
|
| - (node1->doc == node2->doc)) {
|
| + (node1->doc == node2->doc)) {
|
|
|
| l1 = -((long) node1->content);
|
| l2 = -((long) node2->content);
|
| @@ -3339,9 +3339,9 @@ xmlXPathNodeSetDupNs(xmlNodePtr node, xmlNsPtr ns) {
|
| memset(cur, 0, sizeof(xmlNs));
|
| cur->type = XML_NAMESPACE_DECL;
|
| if (ns->href != NULL)
|
| - cur->href = xmlStrdup(ns->href);
|
| + cur->href = xmlStrdup(ns->href);
|
| if (ns->prefix != NULL)
|
| - cur->prefix = xmlStrdup(ns->prefix);
|
| + cur->prefix = xmlStrdup(ns->prefix);
|
| cur->next = (xmlNsPtr) node;
|
| return((xmlNodePtr) cur);
|
| }
|
| @@ -3435,7 +3435,7 @@ xmlXPathNodeSetCreateSize(int size) {
|
| return(NULL);
|
| }
|
| memset(ret->nodeTab, 0 , size * (size_t) sizeof(xmlNodePtr));
|
| - ret->nodeMax = size;
|
| + ret->nodeMax = size;
|
| return(ret);
|
| }
|
|
|
| @@ -3488,7 +3488,7 @@ void
|
| xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
|
| int i;
|
|
|
| -
|
| +
|
| if ((cur == NULL) || (ns == NULL) || (node == NULL) ||
|
| (ns->type != XML_NAMESPACE_DECL) ||
|
| (node->type != XML_ELEMENT_NODE))
|
| @@ -3587,7 +3587,7 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
|
| if (val->type == XML_NAMESPACE_DECL) {
|
| xmlNsPtr ns = (xmlNsPtr) val;
|
|
|
| - cur->nodeTab[cur->nodeNr++] =
|
| + cur->nodeTab[cur->nodeNr++] =
|
| xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
|
| } else
|
| cur->nodeTab[cur->nodeNr++] = val;
|
| @@ -3639,7 +3639,7 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
|
| if (val->type == XML_NAMESPACE_DECL) {
|
| xmlNsPtr ns = (xmlNsPtr) val;
|
|
|
| - cur->nodeTab[cur->nodeNr++] =
|
| + cur->nodeTab[cur->nodeNr++] =
|
| xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
|
| } else
|
| cur->nodeTab[cur->nodeNr++] = val;
|
| @@ -3674,7 +3674,7 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
|
| * If there was a flag on the nodesetval, indicating that
|
| * some temporary nodes are in, that would be helpfull.
|
| */
|
| - /*
|
| + /*
|
| * Optimization: Create an equally sized node-set
|
| * and memcpy the content.
|
| */
|
| @@ -3698,7 +3698,7 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
|
| initNr = val1->nodeNr;
|
|
|
| for (i = 0;i < val2->nodeNr;i++) {
|
| - n2 = val2->nodeTab[i];
|
| + n2 = val2->nodeTab[i];
|
| /*
|
| * check against duplicates
|
| */
|
| @@ -3709,7 +3709,7 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
|
| skip = 1;
|
| break;
|
| } else if ((n1->type == XML_NAMESPACE_DECL) &&
|
| - (n2->type == XML_NAMESPACE_DECL)) {
|
| + (n2->type == XML_NAMESPACE_DECL)) {
|
| if ((((xmlNsPtr) n1)->next == ((xmlNsPtr) n2)->next) &&
|
| (xmlStrEqual(((xmlNsPtr) n1)->prefix,
|
| ((xmlNsPtr) n2)->prefix)))
|
| @@ -3860,7 +3860,7 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| if (set1 == NULL)
|
| return (NULL);
|
|
|
| - initNbSet1 = set1->nodeNr;
|
| + initNbSet1 = set1->nodeNr;
|
| for (i = 0;i < set2->nodeNr;i++) {
|
| n2 = set2->nodeTab[i];
|
| /*
|
| @@ -3873,11 +3873,11 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| */
|
| for (j = 0; j < initNbSet1; j++) {
|
| n1 = set1->nodeTab[j];
|
| - if (n1 == n2) {
|
| + if (n1 == n2) {
|
| goto skip_node;
|
| } else if ((n1->type == XML_NAMESPACE_DECL) &&
|
| (n2->type == XML_NAMESPACE_DECL))
|
| - {
|
| + {
|
| if ((((xmlNsPtr) n1)->next == ((xmlNsPtr) n2)->next) &&
|
| (xmlStrEqual(((xmlNsPtr) n1)->prefix,
|
| ((xmlNsPtr) n2)->prefix)))
|
| @@ -3906,7 +3906,7 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| set1->nodeMax = XML_NODESET_DEFAULT;
|
| } else if (set1->nodeNr >= set1->nodeMax) {
|
| xmlNodePtr *temp;
|
| -
|
| +
|
| set1->nodeMax *= 2;
|
| temp = (xmlNodePtr *) xmlRealloc(
|
| set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr));
|
| @@ -3918,7 +3918,7 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| }
|
| if (n2->type == XML_NAMESPACE_DECL) {
|
| xmlNsPtr ns = (xmlNsPtr) n2;
|
| -
|
| +
|
| set1->nodeTab[set1->nodeNr++] =
|
| xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
|
| } else
|
| @@ -3946,7 +3946,7 @@ skip_node:
|
| static xmlNodeSetPtr
|
| xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| int hasNullEntries)
|
| -{
|
| +{
|
| if (set2 == NULL)
|
| return(set1);
|
| if ((set1 == NULL) && (hasNullEntries == 0)) {
|
| @@ -3970,14 +3970,14 @@ xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| set1 = xmlXPathNodeSetCreate(NULL);
|
| if (set1 == NULL)
|
| return (NULL);
|
| -
|
| +
|
| for (i = 0;i < set2->nodeNr;i++) {
|
| n2 = set2->nodeTab[i];
|
| /*
|
| * Skip NULLed entries.
|
| */
|
| if (n2 == NULL)
|
| - continue;
|
| + continue;
|
| if (set1->nodeMax == 0) {
|
| set1->nodeTab = (xmlNodePtr *) xmlMalloc(
|
| XML_NODESET_DEFAULT * sizeof(xmlNodePtr));
|
| @@ -3990,7 +3990,7 @@ xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
|
| set1->nodeMax = XML_NODESET_DEFAULT;
|
| } else if (set1->nodeNr >= set1->nodeMax) {
|
| xmlNodePtr *temp;
|
| -
|
| +
|
| set1->nodeMax *= 2;
|
| temp = (xmlNodePtr *) xmlRealloc(
|
| set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr));
|
| @@ -4029,7 +4029,7 @@ xmlXPathNodeSetDel(xmlNodeSetPtr cur, xmlNodePtr val) {
|
|
|
| if (i >= cur->nodeNr) { /* not found */
|
| #ifdef DEBUG
|
| - xmlGenericError(xmlGenericErrorContext,
|
| + xmlGenericError(xmlGenericErrorContext,
|
| "xmlXPathNodeSetDel: Node %s wasn't found in NodeList\n",
|
| val->name);
|
| #endif
|
| @@ -4089,7 +4089,7 @@ xmlXPathFreeNodeSet(xmlNodeSetPtr obj) {
|
| /**
|
| * xmlXPathNodeSetClear:
|
| * @set: the node set to clear
|
| - *
|
| + *
|
| * Clears the list from all temporary XPath objects (e.g. namespace nodes
|
| * are feed), but does *not* free the list itself. Sets the length of the
|
| * list to 0.
|
| @@ -4102,13 +4102,13 @@ xmlXPathNodeSetClear(xmlNodeSetPtr set, int hasNsNodes)
|
| else if (hasNsNodes) {
|
| int i;
|
| xmlNodePtr node;
|
| -
|
| +
|
| for (i = 0; i < set->nodeNr; i++) {
|
| node = set->nodeTab[i];
|
| if ((node != NULL) &&
|
| (node->type == XML_NAMESPACE_DECL))
|
| xmlXPathNodeSetFreeNs((xmlNsPtr) node);
|
| - }
|
| + }
|
| }
|
| set->nodeNr = 0;
|
| }
|
| @@ -4117,7 +4117,7 @@ xmlXPathNodeSetClear(xmlNodeSetPtr set, int hasNsNodes)
|
| * xmlXPathNodeSetClearFromPos:
|
| * @set: the node set to be cleared
|
| * @pos: the start position to clear from
|
| - *
|
| + *
|
| * Clears the list from temporary XPath objects (e.g. namespace nodes
|
| * are feed) starting with the entry at @pos, but does *not* free the list
|
| * itself. Sets the length of the list to @pos.
|
| @@ -4130,13 +4130,13 @@ xmlXPathNodeSetClearFromPos(xmlNodeSetPtr set, int pos, int hasNsNodes)
|
| else if ((hasNsNodes)) {
|
| int i;
|
| xmlNodePtr node;
|
| -
|
| +
|
| for (i = pos; i < set->nodeNr; i++) {
|
| node = set->nodeTab[i];
|
| if ((node != NULL) &&
|
| (node->type == XML_NAMESPACE_DECL))
|
| xmlXPathNodeSetFreeNs((xmlNsPtr) node);
|
| - }
|
| + }
|
| }
|
| set->nodeNr = pos;
|
| }
|
| @@ -4413,7 +4413,7 @@ xmlXPathIntersection (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
|
| *
|
| * Implements the EXSLT - Sets distinct() function:
|
| * node-set set:distinct (node-set)
|
| - *
|
| + *
|
| * Returns a subset of the nodes contained in @nodes, or @nodes if
|
| * it is empty
|
| */
|
| @@ -4722,7 +4722,7 @@ xmlXPathTrailing (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
|
| *
|
| * Returns 0 in case of success, -1 in case of error
|
| */
|
| -int
|
| +int
|
| xmlXPathRegisterFunc(xmlXPathContextPtr ctxt, const xmlChar *name,
|
| xmlXPathFunction f) {
|
| return(xmlXPathRegisterFuncNS(ctxt, name, NULL, f));
|
| @@ -4816,7 +4816,7 @@ xmlXPathFunction
|
| xmlXPathFunctionLookupNS(xmlXPathContextPtr ctxt, const xmlChar *name,
|
| const xmlChar *ns_uri) {
|
| xmlXPathFunction ret;
|
| -
|
| +
|
| if (ctxt == NULL)
|
| return(NULL);
|
| if (name == NULL)
|
| @@ -4870,7 +4870,7 @@ xmlXPathRegisteredFuncsCleanup(xmlXPathContextPtr ctxt) {
|
| *
|
| * Returns 0 in case of success, -1 in case of error
|
| */
|
| -int
|
| +int
|
| xmlXPathRegisterVariable(xmlXPathContextPtr ctxt, const xmlChar *name,
|
| xmlXPathObjectPtr value) {
|
| return(xmlXPathRegisterVariableNS(ctxt, name, NULL, value));
|
| @@ -4902,7 +4902,7 @@ xmlXPathRegisterVariableNS(xmlXPathContextPtr ctxt, const xmlChar *name,
|
| if (ctxt->varHash == NULL)
|
| return(-1);
|
| if (value == NULL)
|
| - return(xmlHashRemoveEntry2(ctxt->varHash, name, ns_uri,
|
| + return(xmlHashRemoveEntry2(ctxt->varHash, name, ns_uri,
|
| (xmlHashDeallocator)xmlXPathFreeObject));
|
| return(xmlHashUpdateEntry2(ctxt->varHash, name, ns_uri,
|
| (void *) value,
|
| @@ -4958,7 +4958,7 @@ xmlXPathVariableLookup(xmlXPathContextPtr ctxt, const xmlChar *name) {
|
| * @ns_uri: the variable namespace URI
|
| *
|
| * Search in the Variable array of the context for the given
|
| - * variable value.
|
| + * variable value.
|
| *
|
| * Returns the a copy of the value or NULL if not found
|
| */
|
| @@ -5003,7 +5003,7 @@ xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt) {
|
| /**
|
| * xmlXPathRegisterNs:
|
| * @ctxt: the XPath context
|
| - * @prefix: the namespace prefix
|
| + * @prefix: the namespace prefix cannot be NULL or empty string
|
| * @ns_uri: the namespace name
|
| *
|
| * Register a new namespace. If @ns_uri is NULL it unregisters
|
| @@ -5018,6 +5018,8 @@ xmlXPathRegisterNs(xmlXPathContextPtr ctxt, const xmlChar *prefix,
|
| return(-1);
|
| if (prefix == NULL)
|
| return(-1);
|
| + if (prefix[0] == 0)
|
| + return(-1);
|
|
|
| if (ctxt->nsHash == NULL)
|
| ctxt->nsHash = xmlHashCreate(10);
|
| @@ -5341,7 +5343,7 @@ xmlXPathObjectCopy(xmlXPathObjectPtr val) {
|
| #endif
|
| case XPATH_USERS:
|
| ret->user = val->user;
|
| - break;
|
| + break;
|
| case XPATH_UNDEFINED:
|
| xmlGenericError(xmlGenericErrorContext,
|
| "xmlXPathObjectCopy: unsupported type %d\n",
|
| @@ -5370,7 +5372,7 @@ xmlXPathFreeObject(xmlXPathObjectPtr obj) {
|
| #endif
|
| obj->type = XPATH_XSLT_TREE; /* TODO: Just for debugging. */
|
| if (obj->nodesetval != NULL)
|
| - xmlXPathFreeValueTree(obj->nodesetval);
|
| + xmlXPathFreeValueTree(obj->nodesetval);
|
| } else {
|
| if (obj->nodesetval != NULL)
|
| xmlXPathFreeNodeSet(obj->nodesetval);
|
| @@ -5387,7 +5389,7 @@ xmlXPathFreeObject(xmlXPathObjectPtr obj) {
|
| #ifdef XP_DEBUG_OBJ_USAGE
|
| xmlXPathDebugObjUsageReleased(NULL, obj->type);
|
| #endif
|
| - xmlFree(obj);
|
| + xmlFree(obj);
|
| }
|
|
|
| /**
|
| @@ -5410,7 +5412,7 @@ xmlXPathReleaseObject(xmlXPathContextPtr ctxt, xmlXPathObjectPtr obj)
|
| return;
|
| if ((ctxt == NULL) || (ctxt->cache == NULL)) {
|
| xmlXPathFreeObject(obj);
|
| - } else {
|
| + } else {
|
| xmlXPathContextCachePtr cache =
|
| (xmlXPathContextCachePtr) ctxt->cache;
|
|
|
| @@ -5419,7 +5421,7 @@ xmlXPathReleaseObject(xmlXPathContextPtr ctxt, xmlXPathObjectPtr obj)
|
| case XPATH_XSLT_TREE:
|
| if (obj->nodesetval != NULL) {
|
| if (obj->boolval) {
|
| - /*
|
| + /*
|
| * It looks like the @boolval is used for
|
| * evaluation if this an XSLT Result Tree Fragment.
|
| * TODO: Check if this assumption is correct.
|
| @@ -5466,7 +5468,7 @@ xmlXPathReleaseObject(xmlXPathContextPtr ctxt, xmlXPathObjectPtr obj)
|
| xmlXPtrFreeLocationSet(obj->user);
|
| }
|
| goto free_obj;
|
| -#endif
|
| +#endif
|
| default:
|
| goto free_obj;
|
| }
|
| @@ -5487,7 +5489,7 @@ obj_cached:
|
|
|
| if (obj->nodesetval != NULL) {
|
| xmlNodeSetPtr tmpset = obj->nodesetval;
|
| -
|
| +
|
| /*
|
| * TODO: Due to those nasty ns-nodes, we need to traverse
|
| * the list and free the ns-nodes.
|
| @@ -5510,7 +5512,7 @@ obj_cached:
|
| if ((tmpset->nodeTab[0] != NULL) &&
|
| (tmpset->nodeTab[0]->type == XML_NAMESPACE_DECL))
|
| xmlXPathNodeSetFreeNs((xmlNsPtr) tmpset->nodeTab[0]);
|
| - }
|
| + }
|
| tmpset->nodeNr = 0;
|
| memset(obj, 0, sizeof(xmlXPathObject));
|
| obj->nodesetval = tmpset;
|
| @@ -5522,7 +5524,7 @@ obj_cached:
|
| free_obj:
|
| /*
|
| * Cache is full; free the object.
|
| - */
|
| + */
|
| if (obj->nodesetval != NULL)
|
| xmlXPathFreeNodeSet(obj->nodesetval);
|
| #ifdef XP_DEBUG_OBJ_USAGE
|
| @@ -5633,7 +5635,7 @@ xmlXPathCastNodeSetToString (xmlNodeSetPtr ns) {
|
| * Converts an existing object to its string() equivalent
|
| *
|
| * Returns the allocated string value of the object, NULL in case of error.
|
| - * It's up to the caller to free the string memory with xmlFree().
|
| + * It's up to the caller to free the string memory with xmlFree().
|
| */
|
| xmlChar *
|
| xmlXPathCastToString(xmlXPathObjectPtr val) {
|
| @@ -6024,7 +6026,7 @@ xmlXPathNewContext(xmlDocPtr doc) {
|
| }
|
| #endif
|
|
|
| - xmlXPathRegisterAllFunctions(ret);
|
| + xmlXPathRegisterAllFunctions(ret);
|
|
|
| return(ret);
|
| }
|
| @@ -6055,7 +6057,7 @@ xmlXPathFreeContext(xmlXPathContextPtr ctxt) {
|
| ************************************************************************/
|
|
|
| #define CHECK_CTXT(ctxt) \
|
| - if (ctxt == NULL) { \
|
| + if (ctxt == NULL) { \
|
| __xmlRaiseError(NULL, NULL, NULL, \
|
| NULL, NULL, XML_FROM_XPATH, \
|
| XML_ERR_INTERNAL_ERROR, XML_ERR_FATAL, \
|
| @@ -6066,7 +6068,7 @@ xmlXPathFreeContext(xmlXPathContextPtr ctxt) {
|
| } \
|
|
|
| #define CHECK_CTXT_NEG(ctxt) \
|
| - if (ctxt == NULL) { \
|
| + if (ctxt == NULL) { \
|
| __xmlRaiseError(NULL, NULL, NULL, \
|
| NULL, NULL, XML_FROM_XPATH, \
|
| XML_ERR_INTERNAL_ERROR, XML_ERR_FATAL, \
|
| @@ -6079,7 +6081,7 @@ xmlXPathFreeContext(xmlXPathContextPtr ctxt) {
|
|
|
| #define CHECK_CONTEXT(ctxt) \
|
| if ((ctxt == NULL) || (ctxt->doc == NULL) || \
|
| - (ctxt->doc->children == NULL)) { \
|
| + (ctxt->doc->children == NULL)) { \
|
| xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_INVALID_CTXT); \
|
| return(NULL); \
|
| }
|
| @@ -6142,7 +6144,7 @@ xmlXPathCompParserContext(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctxt) {
|
| memset(ret, 0 , (size_t) sizeof(xmlXPathParserContext));
|
|
|
| /* Allocate the value stack */
|
| - ret->valueTab = (xmlXPathObjectPtr *)
|
| + ret->valueTab = (xmlXPathObjectPtr *)
|
| xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
|
| if (ret->valueTab == NULL) {
|
| xmlFree(ret);
|
| @@ -6289,7 +6291,7 @@ xmlXPathNodeValHash(xmlNodePtr node) {
|
| tmp = tmp->next;
|
| continue;
|
| }
|
| -
|
| +
|
| do {
|
| tmp = tmp->parent;
|
| if (tmp == NULL)
|
| @@ -6448,7 +6450,7 @@ xmlXPathCompareNodeSetString(xmlXPathParserContextPtr ctxt, int inf, int strict,
|
| * If both objects to be compared are node-sets, then the comparison
|
| * will be true if and only if there is a node in the first node-set
|
| * and a node in the second node-set such that the result of performing
|
| - * the comparison on the string-values of the two nodes is true.
|
| + * the comparison on the string-values of the two nodes is true.
|
| * ....
|
| * When neither object to be compared is a node-set and the operator
|
| * is <=, <, >= or >, then the objects are compared by converting both
|
| @@ -6462,7 +6464,7 @@ xmlXPathCompareNodeSetString(xmlXPathParserContextPtr ctxt, int inf, int strict,
|
| * represented by the string; any other string is converted to NaN
|
| *
|
| * Conclusion all nodes need to be converted first to their string value
|
| - * and then the comparison must be done when possible
|
| + * and then the comparison must be done when possible
|
| */
|
| static int
|
| xmlXPathCompareNodeSets(int inf, int strict,
|
| @@ -6517,7 +6519,7 @@ xmlXPathCompareNodeSets(int inf, int strict,
|
| }
|
| if (xmlXPathIsNaN(values2[j]))
|
| continue;
|
| - if (inf && strict)
|
| + if (inf && strict)
|
| ret = (val1 < values2[j]);
|
| else if (inf && !strict)
|
| ret = (val1 <= values2[j]);
|
| @@ -6857,7 +6859,7 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
| case XPATH_STRING:
|
| if ((arg2->stringval == NULL) ||
|
| (arg2->stringval[0] == 0)) ret = 0;
|
| - else
|
| + else
|
| ret = 1;
|
| ret = (arg1->boolval == ret);
|
| break;
|
| @@ -6892,7 +6894,7 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
| case XPATH_NUMBER:
|
| /* Hand check NaN and Infinity equalities */
|
| if (xmlXPathIsNaN(arg1->floatval) ||
|
| - xmlXPathIsNaN(arg2->floatval)) {
|
| + xmlXPathIsNaN(arg2->floatval)) {
|
| ret = 0;
|
| } else if (xmlXPathIsInf(arg1->floatval) == 1) {
|
| if (xmlXPathIsInf(arg2->floatval) == 1)
|
| @@ -6940,7 +6942,7 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
| case XPATH_BOOLEAN:
|
| if ((arg1->stringval == NULL) ||
|
| (arg1->stringval[0] == 0)) ret = 0;
|
| - else
|
| + else
|
| ret = 1;
|
| ret = (arg2->boolval == ret);
|
| break;
|
| @@ -6953,7 +6955,7 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
| arg1 = valuePop(ctxt);
|
| /* Hand check NaN and Infinity equalities */
|
| if (xmlXPathIsNaN(arg1->floatval) ||
|
| - xmlXPathIsNaN(arg2->floatval)) {
|
| + xmlXPathIsNaN(arg2->floatval)) {
|
| ret = 0;
|
| } else if (xmlXPathIsInf(arg1->floatval) == 1) {
|
| if (xmlXPathIsInf(arg2->floatval) == 1)
|
| @@ -7019,7 +7021,7 @@ xmlXPathEqualValues(xmlXPathParserContextPtr ctxt) {
|
| int ret = 0;
|
|
|
| if ((ctxt == NULL) || (ctxt->context == NULL)) return(0);
|
| - arg2 = valuePop(ctxt);
|
| + arg2 = valuePop(ctxt);
|
| arg1 = valuePop(ctxt);
|
| if ((arg1 == NULL) || (arg2 == NULL)) {
|
| if (arg1 != NULL)
|
| @@ -7065,7 +7067,7 @@ xmlXPathEqualValues(xmlXPathParserContextPtr ctxt) {
|
| case XPATH_BOOLEAN:
|
| if ((arg1->nodesetval == NULL) ||
|
| (arg1->nodesetval->nodeNr == 0)) ret = 0;
|
| - else
|
| + else
|
| ret = 1;
|
| ret = (ret == arg2->boolval);
|
| break;
|
| @@ -7104,7 +7106,7 @@ xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt) {
|
| int ret = 0;
|
|
|
| if ((ctxt == NULL) || (ctxt->context == NULL)) return(0);
|
| - arg2 = valuePop(ctxt);
|
| + arg2 = valuePop(ctxt);
|
| arg1 = valuePop(ctxt);
|
| if ((arg1 == NULL) || (arg2 == NULL)) {
|
| if (arg1 != NULL)
|
| @@ -7150,7 +7152,7 @@ xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt) {
|
| case XPATH_BOOLEAN:
|
| if ((arg1->nodesetval == NULL) ||
|
| (arg1->nodesetval->nodeNr == 0)) ret = 0;
|
| - else
|
| + else
|
| ret = 1;
|
| ret = (ret != arg2->boolval);
|
| break;
|
| @@ -7181,7 +7183,7 @@ xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt) {
|
| * @inf: less than (1) or greater than (0)
|
| * @strict: is the comparison strict
|
| *
|
| - * Implement the compare operation on XPath objects:
|
| + * Implement the compare operation on XPath objects:
|
| * @arg1 < @arg2 (1, 1, ...
|
| * @arg1 <= @arg2 (1, 0, ...
|
| * @arg1 > @arg2 (0, 1, ...
|
| @@ -7205,7 +7207,7 @@ xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict) {
|
| xmlXPathObjectPtr arg1, arg2;
|
|
|
| if ((ctxt == NULL) || (ctxt->context == NULL)) return(0);
|
| - arg2 = valuePop(ctxt);
|
| + arg2 = valuePop(ctxt);
|
| arg1 = valuePop(ctxt);
|
| if ((arg1 == NULL) || (arg2 == NULL)) {
|
| if (arg1 != NULL)
|
| @@ -7446,7 +7448,7 @@ xmlXPathDivValues(xmlXPathParserContextPtr ctxt) {
|
| ctxt->value->floatval = xmlXPathPINF;
|
| else if (ctxt->value->floatval < 0)
|
| ctxt->value->floatval = xmlXPathNINF;
|
| - } else
|
| + } else
|
| ctxt->value->floatval /= val;
|
| }
|
|
|
| @@ -7681,10 +7683,10 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
|
| #ifdef LIBXML_DOCB_ENABLED
|
| case XML_DOCB_DOCUMENT_NODE:
|
| #endif
|
| - case XML_HTML_DOCUMENT_NODE:
|
| + case XML_HTML_DOCUMENT_NODE:
|
| return(contextNode);
|
| default:
|
| - return(NULL);
|
| + return(NULL);
|
| }
|
| return(NULL);
|
| } else {
|
| @@ -7695,7 +7697,7 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
|
| case XML_ELEMENT_NODE:
|
| /* TODO: OK to have XInclude here? */
|
| case XML_XINCLUDE_START:
|
| - case XML_DOCUMENT_FRAG_NODE:
|
| + case XML_DOCUMENT_FRAG_NODE:
|
| if (cur != start)
|
| return(cur);
|
| if (cur->children != NULL) {
|
| @@ -7714,13 +7716,13 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
|
| return(xmlDocGetRootElement((xmlDocPtr) cur));
|
| default:
|
| break;
|
| - }
|
| -
|
| + }
|
| +
|
| next_sibling:
|
| if ((cur == NULL) || (cur == contextNode))
|
| - return(NULL);
|
| + return(NULL);
|
| if (cur->next != NULL) {
|
| - cur = cur->next;
|
| + cur = cur->next;
|
| } else {
|
| cur = cur->parent;
|
| goto next_sibling;
|
| @@ -7728,7 +7730,7 @@ next_sibling:
|
| }
|
| }
|
| return(NULL);
|
| -}
|
| +}
|
|
|
| /**
|
| * xmlXPathNextDescendant:
|
| @@ -7760,7 +7762,7 @@ xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
| /*
|
| * Do not descend on entities declarations
|
| */
|
| - if (cur->children->type != XML_ENTITY_DECL) {
|
| + if (cur->children->type != XML_ENTITY_DECL) {
|
| cur = cur->children;
|
| /*
|
| * Skip DTDs
|
| @@ -7778,7 +7780,7 @@ xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
| (cur->type != XML_DTD_NODE))
|
| return(cur);
|
| }
|
| -
|
| +
|
| do {
|
| cur = cur->parent;
|
| if (cur == NULL) break;
|
| @@ -7877,7 +7879,7 @@ xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
| return(NULL);
|
| case XML_NAMESPACE_DECL: {
|
| xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
|
| -
|
| +
|
| if ((ns->next != NULL) &&
|
| (ns->next->type != XML_NAMESPACE_DECL))
|
| return((xmlNodePtr) ns->next);
|
| @@ -7950,7 +7952,7 @@ xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
| return(NULL);
|
| case XML_NAMESPACE_DECL: {
|
| xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
|
| -
|
| +
|
| if ((ns->next != NULL) &&
|
| (ns->next->type != XML_NAMESPACE_DECL))
|
| return((xmlNodePtr) ns->next);
|
| @@ -7994,7 +7996,7 @@ xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
| }
|
| case XML_NAMESPACE_DECL: {
|
| xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
|
| -
|
| +
|
| if ((ns->next != NULL) &&
|
| (ns->next->type != XML_NAMESPACE_DECL))
|
| return((xmlNodePtr) ns->next);
|
| @@ -8191,7 +8193,7 @@ xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur)
|
| * node that are before the context node in document order, excluding any
|
| * ancestors and excluding attribute nodes and namespace nodes; the nodes are
|
| * ordered in reverse document order
|
| - * This is a faster implementation but internal only since it requires a
|
| + * This is a faster implementation but internal only since it requires a
|
| * state kept in the parser context: ctxt->ancestor.
|
| *
|
| * Returns the next element following that axis
|
| @@ -8248,7 +8250,7 @@ xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
| if (ctxt->context->tmpNsList == NULL && cur != (xmlNodePtr) xmlXPathXMLNamespace) {
|
| if (ctxt->context->tmpNsList != NULL)
|
| xmlFree(ctxt->context->tmpNsList);
|
| - ctxt->context->tmpNsList =
|
| + ctxt->context->tmpNsList =
|
| xmlGetNsList(ctxt->context->doc, ctxt->context->node);
|
| ctxt->context->tmpNsNr = 0;
|
| if (ctxt->context->tmpNsList != NULL) {
|
| @@ -8396,7 +8398,7 @@ xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| xmlXPathObjectPtr cur;
|
|
|
| CHECK_ARITY(1);
|
| - if ((ctxt->value == NULL) ||
|
| + if ((ctxt->value == NULL) ||
|
| ((ctxt->value->type != XPATH_NODESET) &&
|
| (ctxt->value->type != XPATH_XSLT_TREE)))
|
| XP_ERROR(XPATH_INVALID_TYPE);
|
| @@ -8541,7 +8543,7 @@ xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| }
|
| obj = xmlXPathCacheConvertString(ctxt->context, obj);
|
| ret = xmlXPathGetElementsByIds(ctxt->context->doc, obj->stringval);
|
| - valuePush(ctxt, xmlXPathCacheWrapNodeSet(ctxt->context, ret));
|
| + valuePush(ctxt, xmlXPathCacheWrapNodeSet(ctxt->context, ret));
|
| xmlXPathReleaseObject(ctxt->context, obj);
|
| return;
|
| }
|
| @@ -8572,7 +8574,7 @@ xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| }
|
|
|
| CHECK_ARITY(1);
|
| - if ((ctxt->value == NULL) ||
|
| + if ((ctxt->value == NULL) ||
|
| ((ctxt->value->type != XPATH_NODESET) &&
|
| (ctxt->value->type != XPATH_XSLT_TREE)))
|
| XP_ERROR(XPATH_INVALID_TYPE);
|
| @@ -8630,7 +8632,7 @@ xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| nargs = 1;
|
| }
|
| CHECK_ARITY(1);
|
| - if ((ctxt->value == NULL) ||
|
| + if ((ctxt->value == NULL) ||
|
| ((ctxt->value->type != XPATH_NODESET) &&
|
| (ctxt->value->type != XPATH_XSLT_TREE)))
|
| XP_ERROR(XPATH_INVALID_TYPE);
|
| @@ -8714,7 +8716,7 @@ xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs)
|
| cur->nodesetval->nodeTab[i]->name));
|
| } else {
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(cur->nodesetval->nodeTab[i]->name,
|
| cur->nodesetval->nodeTab[i]->ns->prefix,
|
| NULL, 0);
|
| @@ -8749,11 +8751,11 @@ xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs)
|
| * the node in the node-set that is first in document order.
|
| * If the node-set is empty, an empty string is returned.
|
| * - A number is converted to a string as follows
|
| - * + NaN is converted to the string NaN
|
| - * + positive zero is converted to the string 0
|
| - * + negative zero is converted to the string 0
|
| - * + positive infinity is converted to the string Infinity
|
| - * + negative infinity is converted to the string -Infinity
|
| + * + NaN is converted to the string NaN
|
| + * + positive zero is converted to the string 0
|
| + * + negative zero is converted to the string 0
|
| + * + positive infinity is converted to the string Infinity
|
| + * + negative infinity is converted to the string -Infinity
|
| * + if the number is an integer, the number is represented in
|
| * decimal form as a Number with no decimal point and no leading
|
| * zeros, preceded by a minus sign (-) if the number is negative
|
| @@ -8827,7 +8829,7 @@ xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| CHECK_TYPE(XPATH_STRING);
|
| cur = valuePop(ctxt);
|
| valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context,
|
| - xmlUTF8Strlen(cur->stringval)));
|
| + xmlUTF8Strlen(cur->stringval)));
|
| xmlXPathReleaseObject(ctxt->context, cur);
|
| }
|
|
|
| @@ -8966,12 +8968,12 @@ xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| * or equal to the second argument and, if the third argument is specified,
|
| * less than the sum of the second and third arguments; the comparisons
|
| * and addition used for the above follow the standard IEEE 754 rules. Thus:
|
| - * - substring("12345", 1.5, 2.6) returns "234"
|
| - * - substring("12345", 0, 3) returns "12"
|
| - * - substring("12345", 0 div 0, 3) returns ""
|
| - * - substring("12345", 1, 0 div 0) returns ""
|
| - * - substring("12345", -42, 1 div 0) returns "12345"
|
| - * - substring("12345", -1 div 0, 1 div 0) returns ""
|
| + * - substring("12345", 1.5, 2.6) returns "234"
|
| + * - substring("12345", 0, 3) returns "12"
|
| + * - substring("12345", 0 div 0, 3) returns ""
|
| + * - substring("12345", 1, 0 div 0) returns ""
|
| + * - substring("12345", -42, 1 div 0) returns "12345"
|
| + * - substring("12345", -1 div 0, 1 div 0) returns ""
|
| */
|
| void
|
| xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| @@ -9012,18 +9014,18 @@ xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| */
|
| if (nargs != 3) {
|
| le = (double)m;
|
| - if (in < 1.0)
|
| + if (in < 1.0)
|
| in = 1.0;
|
| }
|
|
|
| - /* Need to check for the special cases where either
|
| + /* Need to check for the special cases where either
|
| * the index is NaN, the length is NaN, or both
|
| * arguments are infinity (relying on Inf + -Inf = NaN)
|
| */
|
| - if (!xmlXPathIsNaN(in + le) && !xmlXPathIsInf(in)) {
|
| + if (!xmlXPathIsInf(in) && !xmlXPathIsNaN(in + le)) {
|
| /*
|
| * To meet the requirements of the spec, the arguments
|
| - * must be converted to integer format before
|
| + * must be converted to integer format before
|
| * initial index calculations are done
|
| *
|
| * First we go to integer form, rounding up
|
| @@ -9089,13 +9091,13 @@ xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| xmlBufferPtr target;
|
| const xmlChar *point;
|
| int offset;
|
| -
|
| +
|
| CHECK_ARITY(2);
|
| CAST_TO_STRING;
|
| find = valuePop(ctxt);
|
| CAST_TO_STRING;
|
| str = valuePop(ctxt);
|
| -
|
| +
|
| target = xmlBufferCreate();
|
| if (target) {
|
| point = xmlStrstr(str->stringval, find->stringval);
|
| @@ -9132,13 +9134,13 @@ xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| xmlBufferPtr target;
|
| const xmlChar *point;
|
| int offset;
|
| -
|
| +
|
| CHECK_ARITY(2);
|
| CAST_TO_STRING;
|
| find = valuePop(ctxt);
|
| CAST_TO_STRING;
|
| str = valuePop(ctxt);
|
| -
|
| +
|
| target = xmlBufferCreate();
|
| if (target) {
|
| point = xmlStrstr(str->stringval, find->stringval);
|
| @@ -9148,7 +9150,7 @@ xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| xmlStrlen(str->stringval) - offset);
|
| }
|
| valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
|
| - xmlBufferContent(target)));
|
| + xmlBufferContent(target)));
|
| xmlBufferFree(target);
|
| }
|
| xmlXPathReleaseObject(ctxt->context, str);
|
| @@ -9175,7 +9177,7 @@ xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| xmlChar *source = NULL;
|
| xmlBufferPtr target;
|
| xmlChar blank;
|
| -
|
| +
|
| if (ctxt == NULL) return;
|
| if (nargs == 0) {
|
| /* Use current context node */
|
| @@ -9193,11 +9195,11 @@ xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
|
|
| target = xmlBufferCreate();
|
| if (target && source) {
|
| -
|
| +
|
| /* Skip leading whitespaces */
|
| while (IS_BLANK_CH(*source))
|
| source++;
|
| -
|
| +
|
| /* Collapse intermediate whitespaces, and skip trailing whitespaces */
|
| blank = 0;
|
| while (*source) {
|
| @@ -9472,7 +9474,7 @@ xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| double res = 0.0;
|
|
|
| CHECK_ARITY(1);
|
| - if ((ctxt->value == NULL) ||
|
| + if ((ctxt->value == NULL) ||
|
| ((ctxt->value->type != XPATH_NODESET) &&
|
| (ctxt->value->type != XPATH_XSLT_TREE)))
|
| XP_ERROR(XPATH_INVALID_TYPE);
|
| @@ -9591,14 +9593,14 @@ xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| if (ctxt->value->floatval < 0) {
|
| if (ctxt->value->floatval < f - 0.5)
|
| ctxt->value->floatval = f - 1;
|
| - else
|
| + else
|
| ctxt->value->floatval = f;
|
| if (ctxt->value->floatval == 0)
|
| ctxt->value->floatval = xmlXPathNZERO;
|
| } else {
|
| if (ctxt->value->floatval < f + 0.5)
|
| ctxt->value->floatval = f;
|
| - else
|
| + else
|
| ctxt->value->floatval = f + 1;
|
| }
|
| }
|
| @@ -9649,7 +9651,7 @@ xmlXPathCurrentChar(xmlXPathParserContextPtr ctxt, int *len) {
|
| * UCS-4 range (hex.) UTF-8 octet sequence (binary)
|
| * 0000 0000-0000 007F 0xxxxxxx
|
| * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
|
| - * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
|
| + * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
|
| *
|
| * Check for the 0x110000 limit too
|
| */
|
| @@ -9686,7 +9688,7 @@ xmlXPathCurrentChar(xmlXPathParserContextPtr ctxt, int *len) {
|
| }
|
| if (!IS_CHAR(val)) {
|
| XP_ERROR0(XPATH_INVALID_CHAR_ERROR);
|
| - }
|
| + }
|
| return(val);
|
| } else {
|
| /* 1-byte code */
|
| @@ -9758,7 +9760,7 @@ xmlXPathParseNCName(xmlXPathParserContextPtr ctxt) {
|
| /**
|
| * xmlXPathParseQName:
|
| * @ctxt: the XPath Parser context
|
| - * @prefix: a xmlChar **
|
| + * @prefix: a xmlChar **
|
| *
|
| * parse an XML qualified name
|
| *
|
| @@ -9778,7 +9780,7 @@ xmlXPathParseQName(xmlXPathParserContextPtr ctxt, xmlChar **prefix) {
|
|
|
| *prefix = NULL;
|
| ret = xmlXPathParseNCName(ctxt);
|
| - if (CUR == ':') {
|
| + if (ret && CUR == ':') {
|
| *prefix = ret;
|
| NEXT;
|
| ret = xmlXPathParseNCName(ctxt);
|
| @@ -9852,7 +9854,7 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
|
| while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
|
| ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
|
| (c == '.') || (c == '-') ||
|
| - (c == '_') || ((qualified) && (c == ':')) ||
|
| + (c == '_') || ((qualified) && (c == ':')) ||
|
| (IS_COMBINING(c)) ||
|
| (IS_EXTENDER(c)))) {
|
| COPY_BUF(l,buf,len,c);
|
| @@ -9865,7 +9867,7 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
|
| */
|
| xmlChar *buffer;
|
| int max = len * 2;
|
| -
|
| +
|
| buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
|
| if (buffer == NULL) {
|
| XP_ERRORNULL(XPATH_MEMORY_ERROR);
|
| @@ -9873,7 +9875,7 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
|
| memcpy(buffer, buf, len);
|
| while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigname.xml */
|
| (c == '.') || (c == '-') ||
|
| - (c == '_') || ((qualified) && (c == ':')) ||
|
| + (c == '_') || ((qualified) && (c == ':')) ||
|
| (IS_COMBINING(c)) ||
|
| (IS_EXTENDER(c))) {
|
| if (len + 10 > max) {
|
| @@ -9920,7 +9922,7 @@ static double my_pow10[MAX_FRAC+1] = {
|
| * [30a] Float ::= Number ('e' Digits?)?
|
| *
|
| * [30] Number ::= Digits ('.' Digits?)?
|
| - * | '.' Digits
|
| + * | '.' Digits
|
| * [31] Digits ::= [0-9]+
|
| *
|
| * Compile a Number in the string
|
| @@ -10019,7 +10021,7 @@ xmlXPathStringEvalNumber(const xmlChar *str) {
|
| * @ctxt: the XPath Parser context
|
| *
|
| * [30] Number ::= Digits ('.' Digits?)?
|
| - * | '.' Digits
|
| + * | '.' Digits
|
| * [31] Digits ::= [0-9]+
|
| *
|
| * Compile a Number, then push it on the stack
|
| @@ -10199,9 +10201,9 @@ xmlXPathCompLiteral(xmlXPathParserContextPtr ctxt) {
|
| *
|
| * Early evaluation is possible since:
|
| * The variable bindings [...] used to evaluate a subexpression are
|
| - * always the same as those used to evaluate the containing expression.
|
| + * always the same as those used to evaluate the containing expression.
|
| *
|
| - * [36] VariableReference ::= '$' QName
|
| + * [36] VariableReference ::= '$' QName
|
| */
|
| static void
|
| xmlXPathCompVariableReference(xmlXPathParserContextPtr ctxt) {
|
| @@ -10260,7 +10262,7 @@ xmlXPathIsNodeType(const xmlChar *name) {
|
| * @ctxt: the XPath Parser context
|
| *
|
| * [16] FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument)*)? ')'
|
| - * [17] Argument ::= Expr
|
| + * [17] Argument ::= Expr
|
| *
|
| * Compile a function call, the evaluation of all arguments are
|
| * pushed on the stack
|
| @@ -10274,6 +10276,7 @@ xmlXPathCompFunctionCall(xmlXPathParserContextPtr ctxt) {
|
|
|
| name = xmlXPathParseQName(ctxt, &prefix);
|
| if (name == NULL) {
|
| + xmlFree(prefix);
|
| XP_ERROR(XPATH_EXPR_ERROR);
|
| }
|
| SKIP_BLANKS;
|
| @@ -10306,7 +10309,11 @@ xmlXPathCompFunctionCall(xmlXPathParserContextPtr ctxt) {
|
| int op1 = ctxt->comp->last;
|
| ctxt->comp->last = -1;
|
| xmlXPathCompileExpr(ctxt, sort);
|
| - CHECK_ERROR;
|
| + if (ctxt->error != XPATH_EXPRESSION_OK) {
|
| + xmlFree(name);
|
| + xmlFree(prefix);
|
| + return;
|
| + }
|
| PUSH_BINARY_EXPR(XPATH_OP_ARG, op1, ctxt->comp->last, 0, 0);
|
| nbargs++;
|
| if (CUR == ')') break;
|
| @@ -10327,11 +10334,11 @@ xmlXPathCompFunctionCall(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompPrimaryExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [15] PrimaryExpr ::= VariableReference
|
| + * [15] PrimaryExpr ::= VariableReference
|
| * | '(' Expr ')'
|
| - * | Literal
|
| - * | Number
|
| - * | FunctionCall
|
| + * | Literal
|
| + * | Number
|
| + * | FunctionCall
|
| *
|
| * Compile a primary expression.
|
| */
|
| @@ -10363,8 +10370,8 @@ xmlXPathCompPrimaryExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompFilterExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [20] FilterExpr ::= PrimaryExpr
|
| - * | FilterExpr Predicate
|
| + * [20] FilterExpr ::= PrimaryExpr
|
| + * | FilterExpr Predicate
|
| *
|
| * Compile a filter expression.
|
| * Square brackets are used to filter expressions in the same way that
|
| @@ -10379,13 +10386,13 @@ xmlXPathCompFilterExpr(xmlXPathParserContextPtr ctxt) {
|
| xmlXPathCompPrimaryExpr(ctxt);
|
| CHECK_ERROR;
|
| SKIP_BLANKS;
|
| -
|
| +
|
| while (CUR == '[') {
|
| xmlXPathCompPredicate(ctxt, 1);
|
| SKIP_BLANKS;
|
| }
|
|
|
| -
|
| +
|
| }
|
|
|
| /**
|
| @@ -10424,7 +10431,7 @@ xmlXPathScanName(xmlXPathParserContextPtr ctxt) {
|
| while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
|
| ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
|
| (c == '.') || (c == '-') ||
|
| - (c == '_') || (c == ':') ||
|
| + (c == '_') || (c == ':') ||
|
| (IS_COMBINING(c)) ||
|
| (IS_EXTENDER(c)))) {
|
| len += l;
|
| @@ -10440,10 +10447,10 @@ xmlXPathScanName(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompPathExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [19] PathExpr ::= LocationPath
|
| - * | FilterExpr
|
| - * | FilterExpr '/' RelativeLocationPath
|
| - * | FilterExpr '//' RelativeLocationPath
|
| + * [19] PathExpr ::= LocationPath
|
| + * | FilterExpr
|
| + * | FilterExpr '/' RelativeLocationPath
|
| + * | FilterExpr '//' RelativeLocationPath
|
| *
|
| * Compile a path expression.
|
| * The / operator and // operators combine an arbitrary expression
|
| @@ -10460,8 +10467,8 @@ xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
|
| xmlChar *name = NULL; /* we may have to preparse a name to find out */
|
|
|
| SKIP_BLANKS;
|
| - if ((CUR == '$') || (CUR == '(') ||
|
| - (IS_ASCII_DIGIT(CUR)) ||
|
| + if ((CUR == '$') || (CUR == '(') ||
|
| + (IS_ASCII_DIGIT(CUR)) ||
|
| (CUR == '\'') || (CUR == '"') ||
|
| (CUR == '.' && IS_ASCII_DIGIT(NXT(1)))) {
|
| lc = 0;
|
| @@ -10501,7 +10508,7 @@ xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
|
| } else if (name != NULL) {
|
| int len =xmlStrlen(name);
|
|
|
| -
|
| +
|
| while (NXT(len) != 0) {
|
| if (NXT(len) == '/') {
|
| /* element name */
|
| @@ -10568,7 +10575,7 @@ xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
|
| /* make sure all cases are covered explicitly */
|
| XP_ERROR(XPATH_EXPR_ERROR);
|
| }
|
| - }
|
| + }
|
|
|
| if (lc) {
|
| if (CUR == '/') {
|
| @@ -10600,8 +10607,8 @@ xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompUnionExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [18] UnionExpr ::= PathExpr
|
| - * | UnionExpr '|' PathExpr
|
| + * [18] UnionExpr ::= PathExpr
|
| + * | UnionExpr '|' PathExpr
|
| *
|
| * Compile an union expression.
|
| */
|
| @@ -10629,8 +10636,8 @@ xmlXPathCompUnionExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompUnaryExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [27] UnaryExpr ::= UnionExpr
|
| - * | '-' UnaryExpr
|
| + * [27] UnaryExpr ::= UnionExpr
|
| + * | '-' UnaryExpr
|
| *
|
| * Compile an unary expression.
|
| */
|
| @@ -10662,10 +10669,10 @@ xmlXPathCompUnaryExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompMultiplicativeExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [26] MultiplicativeExpr ::= UnaryExpr
|
| - * | MultiplicativeExpr MultiplyOperator UnaryExpr
|
| - * | MultiplicativeExpr 'div' UnaryExpr
|
| - * | MultiplicativeExpr 'mod' UnaryExpr
|
| + * [26] MultiplicativeExpr ::= UnaryExpr
|
| + * | MultiplicativeExpr MultiplyOperator UnaryExpr
|
| + * | MultiplicativeExpr 'div' UnaryExpr
|
| + * | MultiplicativeExpr 'mod' UnaryExpr
|
| * [34] MultiplyOperator ::= '*'
|
| *
|
| * Compile an Additive expression.
|
| @@ -10676,7 +10683,7 @@ xmlXPathCompMultiplicativeExpr(xmlXPathParserContextPtr ctxt) {
|
| xmlXPathCompUnaryExpr(ctxt);
|
| CHECK_ERROR;
|
| SKIP_BLANKS;
|
| - while ((CUR == '*') ||
|
| + while ((CUR == '*') ||
|
| ((CUR == 'd') && (NXT(1) == 'i') && (NXT(2) == 'v')) ||
|
| ((CUR == 'm') && (NXT(1) == 'o') && (NXT(2) == 'd'))) {
|
| int op = -1;
|
| @@ -10704,9 +10711,9 @@ xmlXPathCompMultiplicativeExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompAdditiveExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [25] AdditiveExpr ::= MultiplicativeExpr
|
| - * | AdditiveExpr '+' MultiplicativeExpr
|
| - * | AdditiveExpr '-' MultiplicativeExpr
|
| + * [25] AdditiveExpr ::= MultiplicativeExpr
|
| + * | AdditiveExpr '+' MultiplicativeExpr
|
| + * | AdditiveExpr '-' MultiplicativeExpr
|
| *
|
| * Compile an Additive expression.
|
| */
|
| @@ -10736,11 +10743,11 @@ xmlXPathCompAdditiveExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompRelationalExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [24] RelationalExpr ::= AdditiveExpr
|
| - * | RelationalExpr '<' AdditiveExpr
|
| - * | RelationalExpr '>' AdditiveExpr
|
| - * | RelationalExpr '<=' AdditiveExpr
|
| - * | RelationalExpr '>=' AdditiveExpr
|
| + * [24] RelationalExpr ::= AdditiveExpr
|
| + * | RelationalExpr '<' AdditiveExpr
|
| + * | RelationalExpr '>' AdditiveExpr
|
| + * | RelationalExpr '<=' AdditiveExpr
|
| + * | RelationalExpr '>=' AdditiveExpr
|
| *
|
| * A <= B > C is allowed ? Answer from James, yes with
|
| * (AdditiveExpr <= AdditiveExpr) > AdditiveExpr
|
| @@ -10780,9 +10787,9 @@ xmlXPathCompRelationalExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompEqualityExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [23] EqualityExpr ::= RelationalExpr
|
| - * | EqualityExpr '=' RelationalExpr
|
| - * | EqualityExpr '!=' RelationalExpr
|
| + * [23] EqualityExpr ::= RelationalExpr
|
| + * | EqualityExpr '=' RelationalExpr
|
| + * | EqualityExpr '!=' RelationalExpr
|
| *
|
| * A != B != C is allowed ? Answer from James, yes with
|
| * (RelationalExpr = RelationalExpr) = RelationalExpr
|
| @@ -10817,8 +10824,8 @@ xmlXPathCompEqualityExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompAndExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [22] AndExpr ::= EqualityExpr
|
| - * | AndExpr 'and' EqualityExpr
|
| + * [22] AndExpr ::= EqualityExpr
|
| + * | AndExpr 'and' EqualityExpr
|
| *
|
| * Compile an AND expression.
|
| *
|
| @@ -10843,9 +10850,9 @@ xmlXPathCompAndExpr(xmlXPathParserContextPtr ctxt) {
|
| * xmlXPathCompileExpr:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [14] Expr ::= OrExpr
|
| - * [21] OrExpr ::= AndExpr
|
| - * | OrExpr 'or' AndExpr
|
| + * [14] Expr ::= OrExpr
|
| + * [21] OrExpr ::= AndExpr
|
| + * | OrExpr 'or' AndExpr
|
| *
|
| * Parse and compile an expression
|
| */
|
| @@ -10861,7 +10868,6 @@ xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort) {
|
| xmlXPathCompAndExpr(ctxt);
|
| CHECK_ERROR;
|
| PUSH_BINARY_EXPR(XPATH_OP_OR, op1, ctxt->comp->last, 0, 0);
|
| - op1 = ctxt->comp->nbStep;
|
| SKIP_BLANKS;
|
| }
|
| if ((sort) && (ctxt->comp->steps[ctxt->comp->last].op != XPATH_OP_VALUE)) {
|
| @@ -10881,7 +10887,7 @@ xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort) {
|
| * @filter: act as a filter
|
| *
|
| * [8] Predicate ::= '[' PredicateExpr ']'
|
| - * [9] PredicateExpr ::= Expr
|
| + * [9] PredicateExpr ::= Expr
|
| *
|
| * Compile a predicate expression
|
| */
|
| @@ -10998,7 +11004,7 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
|
| }
|
|
|
| *test = NODE_TEST_TYPE;
|
| -
|
| +
|
| SKIP_BLANKS;
|
| if (*type == NODE_TYPE_PI) {
|
| /*
|
| @@ -11134,7 +11140,7 @@ xmlXPathIsAxisName(const xmlChar *name) {
|
| * @ctxt: the XPath Parser context
|
| *
|
| * [4] Step ::= AxisSpecifier NodeTest Predicate*
|
| - * | AbbreviatedStep
|
| + * | AbbreviatedStep
|
| *
|
| * [12] AbbreviatedStep ::= '.' | '..'
|
| *
|
| @@ -11306,10 +11312,10 @@ eval_predicates:
|
| * xmlXPathCompRelativeLocationPath:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [3] RelativeLocationPath ::= Step
|
| - * | RelativeLocationPath '/' Step
|
| - * | AbbreviatedRelativeLocationPath
|
| - * [11] AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step
|
| + * [3] RelativeLocationPath ::= Step
|
| + * | RelativeLocationPath '/' Step
|
| + * | AbbreviatedRelativeLocationPath
|
| + * [11] AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step
|
| *
|
| * Compile a relative location path.
|
| */
|
| @@ -11327,6 +11333,7 @@ xmlXPathCompRelativeLocationPath
|
| SKIP_BLANKS;
|
| }
|
| xmlXPathCompStep(ctxt);
|
| + CHECK_ERROR;
|
| SKIP_BLANKS;
|
| while (CUR == '/') {
|
| if ((CUR == '/') && (NXT(1) == '/')) {
|
| @@ -11348,12 +11355,12 @@ xmlXPathCompRelativeLocationPath
|
| * xmlXPathCompLocationPath:
|
| * @ctxt: the XPath Parser context
|
| *
|
| - * [1] LocationPath ::= RelativeLocationPath
|
| - * | AbsoluteLocationPath
|
| + * [1] LocationPath ::= RelativeLocationPath
|
| + * | AbsoluteLocationPath
|
| * [2] AbsoluteLocationPath ::= '/' RelativeLocationPath?
|
| - * | AbbreviatedAbsoluteLocationPath
|
| - * [10] AbbreviatedAbsoluteLocationPath ::=
|
| - * '//' RelativeLocationPath
|
| + * | AbbreviatedAbsoluteLocationPath
|
| + * [10] AbbreviatedAbsoluteLocationPath ::=
|
| + * '//' RelativeLocationPath
|
| *
|
| * Compile a location path
|
| *
|
| @@ -11386,13 +11393,14 @@ xmlXPathCompLocationPath(xmlXPathParserContextPtr ctxt) {
|
| (CUR == '@') || (CUR == '*')))
|
| xmlXPathCompRelativeLocationPath(ctxt);
|
| }
|
| + CHECK_ERROR;
|
| }
|
| }
|
| }
|
|
|
| /************************************************************************
|
| * *
|
| - * XPath precompiled expression evaluation *
|
| + * XPath precompiled expression evaluation *
|
| * *
|
| ************************************************************************/
|
|
|
| @@ -11401,12 +11409,11 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op);
|
|
|
| #ifdef DEBUG_STEP
|
| static void
|
| -xmlXPathDebugDumpStepAxis(xmlXPathAxisVal axis,
|
| - xmlXPathTestVal test,
|
| +xmlXPathDebugDumpStepAxis(xmlXPathStepOpPtr op,
|
| int nbNodes)
|
| {
|
| xmlGenericError(xmlGenericErrorContext, "new step : ");
|
| - switch (axis) {
|
| + switch (op->value) {
|
| case AXIS_ANCESTOR:
|
| xmlGenericError(xmlGenericErrorContext, "axis 'ancestors' ");
|
| break;
|
| @@ -11453,14 +11460,14 @@ xmlXPathDebugDumpStepAxis(xmlXPathAxisVal axis,
|
| }
|
| xmlGenericError(xmlGenericErrorContext,
|
| " context contains %d nodes\n", nbNodes);
|
| - switch (test) {
|
| + switch (op->value2) {
|
| case NODE_TEST_NONE:
|
| xmlGenericError(xmlGenericErrorContext,
|
| " searching for none !!!\n");
|
| break;
|
| case NODE_TEST_TYPE:
|
| xmlGenericError(xmlGenericErrorContext,
|
| - " searching for type %d\n", type);
|
| + " searching for type %d\n", op->value3);
|
| break;
|
| case NODE_TEST_PI:
|
| xmlGenericError(xmlGenericErrorContext,
|
| @@ -11473,14 +11480,14 @@ xmlXPathDebugDumpStepAxis(xmlXPathAxisVal axis,
|
| case NODE_TEST_NS:
|
| xmlGenericError(xmlGenericErrorContext,
|
| " searching for namespace %s\n",
|
| - prefix);
|
| + op->value5);
|
| break;
|
| case NODE_TEST_NAME:
|
| xmlGenericError(xmlGenericErrorContext,
|
| - " searching for name %s\n", name);
|
| - if (prefix != NULL)
|
| + " searching for name %s\n", op->value5);
|
| + if (op->value4)
|
| xmlGenericError(xmlGenericErrorContext,
|
| - " with namespace %s\n", prefix);
|
| + " with namespace %s\n", op->value4);
|
| break;
|
| }
|
| xmlGenericError(xmlGenericErrorContext, "Testing : ");
|
| @@ -11509,7 +11516,7 @@ xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt,
|
| CHECK_ERROR0;
|
| if (contextSize <= 0)
|
| return(0);
|
| - }
|
| + }
|
| if (op->ch2 != -1) {
|
| xmlXPathContextPtr xpctxt = ctxt->context;
|
| xmlNodePtr contextNode, oldContextNode;
|
| @@ -11553,7 +11560,7 @@ xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt,
|
| /*
|
| * Get the expression of this predicate.
|
| */
|
| - exprOp = &ctxt->comp->steps[op->ch2];
|
| + exprOp = &ctxt->comp->steps[op->ch2];
|
| newContextSize = 0;
|
| for (i = 0; i < set->nodeNr; i++) {
|
| if (set->nodeTab[i] == NULL)
|
| @@ -11563,8 +11570,8 @@ xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt,
|
| xpctxt->node = contextNode;
|
| xpctxt->contextSize = contextSize;
|
| xpctxt->proximityPosition = ++contextPos;
|
| -
|
| - /*
|
| +
|
| + /*
|
| * Also set the xpath document in case things like
|
| * key() are evaluated in the predicate.
|
| */
|
| @@ -11623,7 +11630,7 @@ xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt,
|
| if (ctxt->value == contextObj)
|
| valuePop(ctxt);
|
| xmlXPathReleaseObject(xpctxt, contextObj);
|
| - }
|
| + }
|
| evaluation_exit:
|
| if (exprRes != NULL)
|
| xmlXPathReleaseObject(ctxt->context, exprRes);
|
| @@ -11707,7 +11714,7 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
| xpctxt->node = contextNode;
|
| xpctxt->contextSize = contextSize;
|
| xpctxt->proximityPosition = ++contextPos;
|
| -
|
| +
|
| /*
|
| * Initialize the new set.
|
| * Also set the xpath document in case things like
|
| @@ -11729,7 +11736,7 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
|
|
| valuePush(ctxt, contextObj);
|
| res = xmlXPathCompOpEvalToBoolean(ctxt, exprOp, 1);
|
| -
|
| +
|
| if ((ctxt->error != XPATH_EXPRESSION_OK) || (res == -1)) {
|
| xmlXPathObjectPtr tmp;
|
| /* pop the result */
|
| @@ -11761,9 +11768,9 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
| }
|
| xmlXPathNodeSetClear(set, hasNsNodes);
|
| set->nodeNr = 1;
|
| - set->nodeTab[0] = contextNode;
|
| + set->nodeTab[0] = contextNode;
|
| goto evaluation_exit;
|
| - }
|
| + }
|
| if (pos == maxPos) {
|
| /*
|
| * We are done.
|
| @@ -11827,7 +11834,7 @@ evaluation_exit:
|
|
|
| static int
|
| xmlXPathIsPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
| - xmlXPathStepOpPtr op,
|
| + xmlXPathStepOpPtr op,
|
| int *maxPos)
|
| {
|
|
|
| @@ -11836,7 +11843,7 @@ xmlXPathIsPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
| /*
|
| * BIG NOTE: This is not intended for XPATH_OP_FILTER yet!
|
| */
|
| -
|
| +
|
| /*
|
| * If not -1, then ch1 will point to:
|
| * 1) For predicates (XPATH_OP_PREDICATE):
|
| @@ -11845,13 +11852,13 @@ xmlXPathIsPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
| * - an inner filter operater OR
|
| * - an expression selecting the node set.
|
| * E.g. "key('a', 'b')" or "(//foo | //bar)".
|
| - */
|
| + */
|
| if ((op->op != XPATH_OP_PREDICATE) && (op->op != XPATH_OP_FILTER))
|
| return(0);
|
|
|
| if (op->ch2 != -1) {
|
| exprOp = &ctxt->comp->steps[op->ch2];
|
| - } else
|
| + } else
|
| return(0);
|
|
|
| if ((exprOp != NULL) &&
|
| @@ -11870,10 +11877,10 @@ xmlXPathIsPositionalPredicate(xmlXPathParserContextPtr ctxt,
|
| * Maybe we could rewrite the AST to ease the optimization.
|
| */
|
| *maxPos = (int) ((xmlXPathObjectPtr) exprOp->value4)->floatval;
|
| -
|
| +
|
| if (((xmlXPathObjectPtr) exprOp->value4)->floatval ==
|
| (float) *maxPos)
|
| - {
|
| + {
|
| return(1);
|
| }
|
| }
|
| @@ -11934,7 +11941,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| * Used to feed predicate evaluation.
|
| */
|
| xmlNodeSetPtr seq;
|
| - xmlNodePtr cur;
|
| + xmlNodePtr cur;
|
| /* First predicate operator */
|
| xmlXPathStepOpPtr predOp;
|
| int maxPos; /* The requested position() (when a "[n]" predicate) */
|
| @@ -11946,7 +11953,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| xmlXPathTraversalFunctionExt outerNext = NULL;
|
| void (*addNode) (xmlNodeSetPtr, xmlNodePtr);
|
| xmlXPathNodeSetMergeFunction mergeAndClear;
|
| - xmlNodePtr oldContextNode;
|
| + xmlNodePtr oldContextNode;
|
| xmlXPathContextPtr xpctxt = ctxt->context;
|
|
|
|
|
| @@ -11961,7 +11968,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| xmlXPathReleaseObject(xpctxt, obj);
|
| XP_ERROR0(XPATH_UNDEF_PREFIX_ERROR);
|
| }
|
| - }
|
| + }
|
| /*
|
| * Setup axis.
|
| *
|
| @@ -11975,7 +11982,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| * avoid a duplicate-aware merge, if the axis to be traversed is e.g.
|
| * the descendant-or-self axis.
|
| */
|
| - addNode = xmlXPathNodeSetAdd;
|
| mergeAndClear = xmlXPathNodeSetMergeAndClear;
|
| switch (axis) {
|
| case AXIS_ANCESTOR:
|
| @@ -11999,8 +12005,8 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| * This iterator will give us only nodes which can
|
| * hold element nodes.
|
| */
|
| - outerNext = xmlXPathNextDescendantOrSelfElemParent;
|
| - }
|
| + outerNext = xmlXPathNextDescendantOrSelfElemParent;
|
| + }
|
| if (((test == NODE_TEST_NAME) || (test == NODE_TEST_ALL)) &&
|
| (type == NODE_TYPE_NODE))
|
| {
|
| @@ -12055,20 +12061,20 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| }
|
|
|
| #ifdef DEBUG_STEP
|
| - xmlXPathDebugDumpStepAxis(axis, test,
|
| - (obj->nodesetval != NULL) ? obj->nodsetval->nodeNr : 0);
|
| + xmlXPathDebugDumpStepAxis(op,
|
| + (obj->nodesetval != NULL) ? obj->nodesetval->nodeNr : 0);
|
| #endif
|
|
|
| if (next == NULL) {
|
| - xmlXPathReleaseObject(xpctxt, obj);
|
| + xmlXPathReleaseObject(xpctxt, obj);
|
| return(0);
|
| - }
|
| + }
|
| contextSeq = obj->nodesetval;
|
| if ((contextSeq == NULL) || (contextSeq->nodeNr <= 0)) {
|
| xmlXPathReleaseObject(xpctxt, obj);
|
| valuePush(ctxt, xmlXPathCacheWrapNodeSet(xpctxt, NULL));
|
| return(0);
|
| - }
|
| + }
|
| /*
|
| * Predicate optimization ---------------------------------------------
|
| * If this step has a last predicate, which contains a position(),
|
| @@ -12076,7 +12082,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| * the short-hand form, i.e., "[n]".
|
| *
|
| * Example - expression "/foo[parent::bar][1]":
|
| - *
|
| + *
|
| * COLLECT 'child' 'name' 'node' foo -- op (we are here)
|
| * ROOT -- op->ch1
|
| * PREDICATE -- op->ch2 (predOp)
|
| @@ -12109,7 +12115,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| */
|
| predOp = NULL;
|
| hasAxisRange = 1;
|
| - }
|
| + }
|
| }
|
| }
|
| breakOnFirstHit = ((toBool) && (predOp == NULL)) ? 1 : 0;
|
| @@ -12118,7 +12124,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| */
|
| /*
|
| * 2.3 Node Tests
|
| - * - For the attribute axis, the principal node type is attribute.
|
| + * - For the attribute axis, the principal node type is attribute.
|
| * - For the namespace axis, the principal node type is namespace.
|
| * - For other axes, the principal node type is element.
|
| *
|
| @@ -12155,8 +12161,8 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| */
|
| xpctxt->node = contextNode;
|
| } else
|
| - xpctxt->node = contextSeq->nodeTab[contextIdx++];
|
| -
|
| + xpctxt->node = contextSeq->nodeTab[contextIdx++];
|
| +
|
| if (seq == NULL) {
|
| seq = xmlXPathNodeSetCreate(NULL);
|
| if (seq == NULL) {
|
| @@ -12210,7 +12216,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| #ifdef DEBUG_STEP
|
| xmlGenericError(xmlGenericErrorContext, " %s", cur->name);
|
| #endif
|
| -
|
| +
|
| switch (test) {
|
| case NODE_TEST_NONE:
|
| total = 0;
|
| @@ -12229,7 +12235,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
| #ifdef LIBXML_DOCB_ENABLED
|
| case XML_DOCB_DOCUMENT_NODE:
|
| #endif
|
| - case XML_ELEMENT_NODE:
|
| + case XML_ELEMENT_NODE:
|
| case XML_ATTRIBUTE_NODE:
|
| case XML_PI_NODE:
|
| case XML_COMMENT_NODE:
|
| @@ -12357,7 +12363,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
|
|
| goto apply_predicates;
|
|
|
| -axis_range_end: /* ----------------------------------------------------- */
|
| +axis_range_end: /* ----------------------------------------------------- */
|
| /*
|
| * We have a "/foo[n]", and position() = n was reached.
|
| * Note that we can have as well "/foo/::parent::foo[1]", so
|
| @@ -12396,11 +12402,11 @@ first_hit: /* ---------------------------------------------------------- */
|
| apply_predicates: /* --------------------------------------------------- */
|
| /*
|
| * Apply predicates.
|
| - */
|
| + */
|
| if ((predOp != NULL) && (seq->nodeNr > 0)) {
|
| /*
|
| * E.g. when we have a "/foo[some expression][n]".
|
| - */
|
| + */
|
| /*
|
| * QUESTION TODO: The old predicate evaluation took into
|
| * account location-sets.
|
| @@ -12409,7 +12415,7 @@ apply_predicates: /* --------------------------------------------------- */
|
| * All what I learned now from the evaluation semantics
|
| * does not indicate that a location-set will be processed
|
| * here, so this looks OK.
|
| - */
|
| + */
|
| /*
|
| * Iterate over all predicates, starting with the outermost
|
| * predicate.
|
| @@ -12425,7 +12431,7 @@ apply_predicates: /* --------------------------------------------------- */
|
| *
|
| * For the moment, I'll try to solve this with a recursive
|
| * function: xmlXPathCompOpEvalPredicate().
|
| - */
|
| + */
|
| size = seq->nodeNr;
|
| if (hasPredicateRange != 0)
|
| newSize = xmlXPathCompOpEvalPositionalPredicate(ctxt,
|
| @@ -12480,7 +12486,7 @@ apply_predicates: /* --------------------------------------------------- */
|
| } else {
|
| outSeq = mergeAndClear(outSeq, seq, 0);
|
| }
|
| - }
|
| + }
|
| }
|
|
|
| error:
|
| @@ -12509,7 +12515,7 @@ error:
|
| }
|
| if ((seq != NULL) && (seq != outSeq)) {
|
| xmlXPathFreeNodeSet(seq);
|
| - }
|
| + }
|
| /*
|
| * Hand over the result. Better to push the set also in
|
| * case of errors.
|
| @@ -12793,9 +12799,9 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| xmlXPathStepOpPtr op, xmlNodePtr * first)
|
| {
|
| int total = 0;
|
| - xmlXPathCompExprPtr comp;
|
| + xmlXPathCompExprPtr comp;
|
| xmlXPathObjectPtr res;
|
| - xmlXPathObjectPtr obj;
|
| + xmlXPathObjectPtr obj;
|
| xmlNodeSetPtr oldset;
|
| xmlNodePtr oldnode;
|
| xmlDocPtr oldDoc;
|
| @@ -12810,7 +12816,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| (comp->steps[op->ch1].op == XPATH_OP_SORT) &&
|
| (comp->steps[op->ch2].op == XPATH_OP_SORT)) {
|
| int f = comp->steps[op->ch2].ch1;
|
| -
|
| +
|
| if ((f != -1) &&
|
| (comp->steps[f].op == XPATH_OP_FUNCTION) &&
|
| (comp->steps[f].value5 == NULL) &&
|
| @@ -12819,7 +12825,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| (xmlStrEqual
|
| (comp->steps[f].value4, BAD_CAST "last"))) {
|
| xmlNodePtr last = NULL;
|
| -
|
| +
|
| total +=
|
| xmlXPathCompOpEvalLast(ctxt,
|
| &comp->steps[op->ch1],
|
| @@ -12846,7 +12852,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| return (total);
|
| }
|
| }
|
| -
|
| +
|
| if (op->ch1 != -1)
|
| total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
|
| CHECK_ERROR0;
|
| @@ -12854,7 +12860,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| return (total);
|
| if (ctxt->value == NULL)
|
| return (total);
|
| -
|
| +
|
| #ifdef LIBXML_XPTR_ENABLED
|
| oldnode = ctxt->context->node;
|
| /*
|
| @@ -12864,7 +12870,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| xmlXPathObjectPtr tmp = NULL;
|
| xmlLocationSetPtr newlocset = NULL;
|
| xmlLocationSetPtr oldlocset;
|
| -
|
| +
|
| /*
|
| * Extract the old locset, and then evaluate the result of the
|
| * expression for all the element in the locset. use it to grow
|
| @@ -12874,7 +12880,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| obj = valuePop(ctxt);
|
| oldlocset = obj->user;
|
| ctxt->context->node = NULL;
|
| -
|
| +
|
| if ((oldlocset == NULL) || (oldlocset->locNr == 0)) {
|
| ctxt->context->contextSize = 0;
|
| ctxt->context->proximityPosition = 0;
|
| @@ -12889,7 +12895,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| return (total);
|
| }
|
| newlocset = xmlXPtrLocationSetCreate(NULL);
|
| -
|
| +
|
| for (i = 0; i < oldlocset->locNr; i++) {
|
| /*
|
| * Run the evaluation with a node list made of a
|
| @@ -12904,7 +12910,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| } else {
|
| xmlXPathNodeSetAddUnique(tmp->nodesetval,
|
| ctxt->context->node);
|
| - }
|
| + }
|
| valuePush(ctxt, tmp);
|
| if (op->ch2 != -1)
|
| total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
|
| @@ -12930,14 +12936,14 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| }
|
| if (ctxt->value == tmp) {
|
| valuePop(ctxt);
|
| - xmlXPathNodeSetClear(tmp->nodesetval, 1);
|
| + xmlXPathNodeSetClear(tmp->nodesetval, 1);
|
| /*
|
| * REVISIT TODO: Don't create a temporary nodeset
|
| * for everly iteration.
|
| */
|
| /* OLD: xmlXPathFreeObject(res); */
|
| } else
|
| - tmp = NULL;
|
| + tmp = NULL;
|
| ctxt->context->node = NULL;
|
| /*
|
| * Only put the first node in the result, then leave.
|
| @@ -12962,7 +12968,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| return (total);
|
| }
|
| #endif /* LIBXML_XPTR_ENABLED */
|
| -
|
| +
|
| /*
|
| * Extract the old set, and then evaluate the result of the
|
| * expression for all the element in the set. use it to grow
|
| @@ -12971,11 +12977,11 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| CHECK_TYPE0(XPATH_NODESET);
|
| obj = valuePop(ctxt);
|
| oldset = obj->nodesetval;
|
| -
|
| +
|
| oldnode = ctxt->context->node;
|
| oldDoc = ctxt->context->doc;
|
| ctxt->context->node = NULL;
|
| -
|
| +
|
| if ((oldset == NULL) || (oldset->nodeNr == 0)) {
|
| ctxt->context->contextSize = 0;
|
| ctxt->context->proximityPosition = 0;
|
| @@ -12999,10 +13005,10 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| * Initialize the new set.
|
| * Also set the xpath document in case things like
|
| * key() evaluation are attempted on the predicate
|
| - */
|
| + */
|
| newset = xmlXPathNodeSetCreate(NULL);
|
| /* XXX what if xmlXPathNodeSetCreate returned NULL? */
|
| -
|
| +
|
| for (i = 0; i < oldset->nodeNr; i++) {
|
| /*
|
| * Run the evaluation with a node list made of
|
| @@ -13028,7 +13034,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| xmlXPathFreeNodeSet(newset);
|
| xmlXPathFreeObject(obj);
|
| return(0);
|
| - }
|
| + }
|
| /*
|
| * The result of the evaluation needs to be tested to
|
| * decide whether the filter succeeded or not
|
| @@ -13036,7 +13042,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
| res = valuePop(ctxt);
|
| if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
|
| xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]);
|
| - }
|
| + }
|
| /*
|
| * Cleanup
|
| */
|
| @@ -13172,7 +13178,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
|
| CHECK_ERROR0;
|
| if (op->value)
|
| - equal = xmlXPathEqualValues(ctxt);
|
| + equal = xmlXPathEqualValues(ctxt);
|
| else
|
| equal = xmlXPathNotEqualValues(ctxt);
|
| valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, equal));
|
| @@ -13325,8 +13331,8 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| URI = xmlXPathNsLookup(ctxt->context, op->value5);
|
| if (URI == NULL) {
|
| xmlGenericError(xmlGenericErrorContext,
|
| - "xmlXPathCompOpEval: variable %s bound to undefined prefix %s\n",
|
| - op->value4, op->value5);
|
| + "xmlXPathCompOpEval: variable %s bound to undefined prefix %s\n",
|
| + (char *) op->value4, (char *)op->value5);
|
| return (total);
|
| }
|
| val = xmlXPathVariableLookupNS(ctxt->context,
|
| @@ -13373,8 +13379,8 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| URI = xmlXPathNsLookup(ctxt->context, op->value5);
|
| if (URI == NULL) {
|
| xmlGenericError(xmlGenericErrorContext,
|
| - "xmlXPathCompOpEval: function %s bound to undefined prefix %s\n",
|
| - op->value4, op->value5);
|
| + "xmlXPathCompOpEval: function %s bound to undefined prefix %s\n",
|
| + (char *)op->value4, (char *)op->value5);
|
| return (total);
|
| }
|
| func = xmlXPathFunctionLookupNS(ctxt->context,
|
| @@ -13382,8 +13388,8 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| }
|
| if (func == NULL) {
|
| xmlGenericError(xmlGenericErrorContext,
|
| - "xmlXPathCompOpEval: function %s not found\n",
|
| - op->value4);
|
| + "xmlXPathCompOpEval: function %s not found\n",
|
| + (char *)op->value4);
|
| XP_ERROR0(XPATH_UNKNOWN_FUNC_ERROR);
|
| }
|
| op->cache = XML_CAST_FPTR(func);
|
| @@ -13581,7 +13587,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| tmp = xmlXPathCacheNewNodeSet(ctxt->context,
|
| ctxt->context->node);
|
| valuePush(ctxt, tmp);
|
| -
|
| +
|
| if (op->ch2 != -1)
|
| total +=
|
| xmlXPathCompOpEval(ctxt,
|
| @@ -13690,7 +13696,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| * nC 2
|
| *
|
| * removed the first node in the node-set, then
|
| - * the context position of the
|
| + * the context position of the
|
| */
|
| for (i = 0; i < oldset->nodeNr; i++) {
|
| /*
|
| @@ -13747,7 +13753,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
| }
|
| if (ctxt->value == tmp) {
|
| valuePop(ctxt);
|
| - xmlXPathNodeSetClear(tmp->nodesetval, 1);
|
| + xmlXPathNodeSetClear(tmp->nodesetval, 1);
|
| /*
|
| * Don't free the temporary nodeset
|
| * in order to avoid massive recreation inside this
|
| @@ -13850,7 +13856,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
|
|
| res = valuePop(ctxt);
|
| if (res->type == XPATH_LOCATIONSET) {
|
| - xmlLocationSetPtr rloc =
|
| + xmlLocationSetPtr rloc =
|
| (xmlLocationSetPtr)res->user;
|
| for (j=0; j<rloc->locNr; j++) {
|
| range = xmlXPtrNewRange(
|
| @@ -14012,7 +14018,7 @@ start:
|
| xmlXPathCompOpEval(ctxt, op);
|
| if (ctxt->error != XPATH_EXPRESSION_OK)
|
| return(-1);
|
| -
|
| +
|
| resObj = valuePop(ctxt);
|
| if (resObj == NULL)
|
| return(-1);
|
| @@ -14033,7 +14039,7 @@ start:
|
| * to true if the number is equal to the context position
|
| * and will be converted to false otherwise;"
|
| */
|
| - res = xmlXPathEvaluatePredicateResult(ctxt, resObj);
|
| + res = xmlXPathEvaluatePredicateResult(ctxt, resObj);
|
| } else {
|
| res = xmlXPathCastToBoolean(resObj);
|
| }
|
| @@ -14056,13 +14062,13 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp,
|
| xmlXPathObjectPtr *resultSeq, int toBool)
|
| {
|
| int max_depth, min_depth;
|
| - int from_root;
|
| + int from_root;
|
| int ret, depth;
|
| int eval_all_nodes;
|
| xmlNodePtr cur = NULL, limit = NULL;
|
| xmlStreamCtxtPtr patstream = NULL;
|
| -
|
| - int nb_nodes = 0;
|
| +
|
| + int nb_nodes = 0;
|
|
|
| if ((ctxt == NULL) || (comp == NULL))
|
| return(-1);
|
| @@ -14088,7 +14094,7 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp,
|
| if (*resultSeq == NULL)
|
| return(-1);
|
| }
|
| -
|
| +
|
| /*
|
| * handle the special cases of "/" amd "." being matched
|
| */
|
| @@ -14185,7 +14191,7 @@ next_node:
|
| ret = xmlStreamPushNode(patstream, NULL, NULL, cur->type);
|
| else
|
| break;
|
| -
|
| +
|
| if (ret < 0) {
|
| /* NOP. */
|
| } else if (ret == 1) {
|
| @@ -14209,7 +14215,7 @@ next_node:
|
| scan_children:
|
| if ((cur->children != NULL) && (depth < max_depth)) {
|
| /*
|
| - * Do not descend on entities declarations
|
| + * Do not descend on entities declarations
|
| */
|
| if (cur->children->type != XML_ENTITY_DECL) {
|
| cur = cur->children;
|
| @@ -14231,7 +14237,7 @@ scan_children:
|
| (cur->type != XML_DTD_NODE))
|
| goto next_node;
|
| }
|
| -
|
| +
|
| do {
|
| cur = cur->parent;
|
| depth--;
|
| @@ -14290,7 +14296,7 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
|
|
| if (ctxt->valueTab == NULL) {
|
| /* Allocate the value stack */
|
| - ctxt->valueTab = (xmlXPathObjectPtr *)
|
| + ctxt->valueTab = (xmlXPathObjectPtr *)
|
| xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
|
| if (ctxt->valueTab == NULL) {
|
| xmlXPathPErrMemory(ctxt, "creating evaluation context\n");
|
| @@ -14313,7 +14319,7 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
| if (res != -1)
|
| return(res);
|
| } else {
|
| - xmlXPathObjectPtr resObj = NULL;
|
| + xmlXPathObjectPtr resObj = NULL;
|
|
|
| /*
|
| * Evaluation to a sequence.
|
| @@ -14326,7 +14332,7 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
| return(0);
|
| }
|
| if (resObj != NULL)
|
| - xmlXPathReleaseObject(ctxt->context, resObj);
|
| + xmlXPathReleaseObject(ctxt->context, resObj);
|
| }
|
| /*
|
| * QUESTION TODO: This falls back to normal XPath evaluation
|
| @@ -14351,7 +14357,7 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
|
|
| /************************************************************************
|
| * *
|
| - * Public interfaces *
|
| + * Public interfaces *
|
| * *
|
| ************************************************************************/
|
|
|
| @@ -14367,7 +14373,7 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
| * context node in the context node list (as returned by the position
|
| * function) and will be converted to false otherwise; if the result
|
| * is not a number, then the result will be converted as if by a call
|
| - * to the boolean function.
|
| + * to the boolean function.
|
| *
|
| * Returns 1 if predicate is true, 0 otherwise
|
| */
|
| @@ -14405,12 +14411,12 @@ xmlXPathEvalPredicate(xmlXPathContextPtr ctxt, xmlXPathObjectPtr res) {
|
| * context node in the context node list (as returned by the position
|
| * function) and will be converted to false otherwise; if the result
|
| * is not a number, then the result will be converted as if by a call
|
| - * to the boolean function.
|
| + * to the boolean function.
|
| *
|
| * Returns 1 if predicate is true, 0 otherwise
|
| */
|
| int
|
| -xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt,
|
| +xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt,
|
| xmlXPathObjectPtr res) {
|
| if ((ctxt == NULL) || (res == NULL)) return(0);
|
| switch (res->type) {
|
| @@ -14483,7 +14489,7 @@ xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
| tmp = xmlStrchr(str, ':');
|
| if ((tmp != NULL) &&
|
| ((ctxt == NULL) || (ctxt->nsNr == 0) || (tmp[1] == ':')))
|
| - return(NULL);
|
| + return(NULL);
|
|
|
| if (ctxt != NULL) {
|
| dict = ctxt->dict;
|
| @@ -14499,7 +14505,7 @@ xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
| namespaces[i++] = ns->prefix;
|
| }
|
| namespaces[i++] = NULL;
|
| - namespaces[i++] = NULL;
|
| + namespaces[i] = NULL;
|
| }
|
| }
|
|
|
| @@ -14507,7 +14513,7 @@ xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
| &namespaces[0]);
|
| if (namespaces != NULL) {
|
| xmlFree((xmlChar **)namespaces);
|
| - }
|
| + }
|
| if ((stream != NULL) && (xmlPatternStreamable(stream) == 1)) {
|
| comp = xmlXPathNewCompExpr();
|
| if (comp == NULL) {
|
| @@ -14546,30 +14552,30 @@ xmlXPathRewriteDOSExpression(xmlXPathCompExprPtr comp, xmlXPathStepOpPtr op)
|
| */
|
| if (op->ch1 != -1) {
|
| if ((op->op == XPATH_OP_COLLECT /* 11 */) &&
|
| - ((xmlXPathAxisVal) op->value == AXIS_CHILD /* 4 */) &&
|
| + ((xmlXPathAxisVal) op->value == AXIS_CHILD /* 4 */) &&
|
| ((xmlXPathTestVal) op->value2 == NODE_TEST_NAME /* 5 */) &&
|
| ((xmlXPathTypeVal) op->value3 == NODE_TYPE_NODE /* 0 */))
|
| {
|
| /*
|
| * This is a "child::foo"
|
| */
|
| - xmlXPathStepOpPtr prevop = &comp->steps[op->ch1];
|
| + xmlXPathStepOpPtr prevop = &comp->steps[op->ch1];
|
|
|
| if ((prevop->op == XPATH_OP_COLLECT /* 11 */) &&
|
| - (prevop->ch1 != -1) &&
|
| + (prevop->ch1 != -1) &&
|
| ((xmlXPathAxisVal) prevop->value ==
|
| AXIS_DESCENDANT_OR_SELF) &&
|
| (prevop->ch2 == -1) &&
|
| ((xmlXPathTestVal) prevop->value2 == NODE_TEST_TYPE) &&
|
| ((xmlXPathTypeVal) prevop->value3 == NODE_TYPE_NODE) &&
|
| (comp->steps[prevop->ch1].op == XPATH_OP_ROOT))
|
| - {
|
| + {
|
| /*
|
| * This is a "/descendant-or-self::node()" without predicates.
|
| * Eliminate it.
|
| */
|
| op->ch1 = prevop->ch1;
|
| - op->rewriteType = XP_REWRITE_DOS_CHILD_ELEM;
|
| + op->rewriteType = XP_REWRITE_DOS_CHILD_ELEM;
|
| }
|
| }
|
| if (op->ch1 != -1)
|
| @@ -14614,7 +14620,7 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
| }
|
|
|
| if (*pctxt->cur != 0) {
|
| - /*
|
| + /*
|
| * aleksey: in some cases this line prints *second* error message
|
| * (see bug #78858) and probably this should be fixed.
|
| * However, we are not sure that all error messages are printed
|
| @@ -14633,7 +14639,7 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
| #ifdef DEBUG_EVAL_COUNTS
|
| comp->string = xmlStrdup(str);
|
| comp->nb = 0;
|
| -#endif
|
| +#endif
|
| if ((comp->expr != NULL) &&
|
| (comp->nbStep > 2) &&
|
| (comp->last >= 0) &&
|
| @@ -14678,7 +14684,7 @@ xmlXPathCompiledEvalInternal(xmlXPathCompExprPtr comp,
|
| xmlXPathObjectPtr *resObj,
|
| int toBool)
|
| {
|
| - xmlXPathParserContextPtr pctxt;
|
| + xmlXPathParserContextPtr pctxt;
|
| #ifndef LIBXML_THREAD_ENABLED
|
| static int reentance = 0;
|
| #endif
|
| @@ -14707,15 +14713,15 @@ xmlXPathCompiledEvalInternal(xmlXPathCompExprPtr comp,
|
| res = xmlXPathRunEval(pctxt, toBool);
|
|
|
| if (resObj) {
|
| - if (pctxt->value == NULL) {
|
| + if (pctxt->value == NULL) {
|
| xmlGenericError(xmlGenericErrorContext,
|
| "xmlXPathCompiledEval: evaluation failed\n");
|
| - *resObj = NULL;
|
| + *resObj = NULL;
|
| } else {
|
| *resObj = valuePop(pctxt);
|
| }
|
| }
|
| -
|
| +
|
| /*
|
| * Pop all remaining objects from the stack.
|
| */
|
| @@ -14726,7 +14732,7 @@ xmlXPathCompiledEvalInternal(xmlXPathCompExprPtr comp,
|
| do {
|
| tmp = valuePop(pctxt);
|
| if (tmp != NULL) {
|
| - stack++;
|
| + stack++;
|
| xmlXPathReleaseObject(ctxt, tmp);
|
| }
|
| } while (tmp != NULL);
|
| @@ -14738,11 +14744,11 @@ xmlXPathCompiledEvalInternal(xmlXPathCompExprPtr comp,
|
| stack);
|
| }
|
| }
|
| -
|
| +
|
| if ((pctxt->error != XPATH_EXPRESSION_OK) && (resObj) && (*resObj)) {
|
| xmlXPathFreeObject(*resObj);
|
| *resObj = NULL;
|
| - }
|
| + }
|
| pctxt->comp = NULL;
|
| xmlXPathFreeParserContext(pctxt);
|
| #ifndef LIBXML_THREAD_ENABLED
|
| @@ -14803,7 +14809,7 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
|
| #endif
|
|
|
| if (ctxt == NULL) return;
|
| -
|
| +
|
| #ifdef XPATH_STREAMING
|
| comp = xmlXPathTryStreamCompile(ctxt->context, ctxt->base);
|
| if (comp != NULL) {
|
| @@ -14831,7 +14837,7 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
|
| }
|
| }
|
| CHECK_ERROR;
|
| - xmlXPathRunEval(ctxt, 0);
|
| + xmlXPathRunEval(ctxt, 0);
|
| }
|
|
|
| /**
|
| @@ -14863,7 +14869,7 @@ xmlXPathEval(const xmlChar *str, xmlXPathContextPtr ctx) {
|
| xmlGenericError(xmlGenericErrorContext,
|
| "xmlXPathEval: evaluation failed\n");
|
| res = NULL;
|
| - } else if ((*ctxt->cur != 0) && (ctxt->comp != NULL)
|
| + } else if ((*ctxt->cur != 0) && (ctxt->comp != NULL)
|
| #ifdef XPATH_STREAMING
|
| && (ctxt->comp->stream == NULL)
|
| #endif
|
| @@ -14976,21 +14982,21 @@ xmlXPathEvalExpression(const xmlChar *str, xmlXPathContextPtr ctxt) {
|
| * If $escape-reserved is false, the behavior differs in that characters
|
| * referred to in [RFC 2396] as reserved characters are not escaped. These
|
| * characters are ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ",".
|
| - *
|
| + *
|
| * [RFC 2396] does not define whether escaped URIs should use lower case or
|
| * upper case for hexadecimal digits. To ensure that escaped URIs can be
|
| * compared using string comparison functions, this function must always use
|
| * the upper-case letters A-F.
|
| - *
|
| + *
|
| * Generally, $escape-reserved should be set to true when escaping a string
|
| * that is to form a single part of a URI, and to false when escaping an
|
| * entire URI or URI reference.
|
| - *
|
| - * In the case of non-ascii characters, the string is encoded according to
|
| + *
|
| + * In the case of non-ascii characters, the string is encoded according to
|
| * utf-8 and then converted according to RFC 2396.
|
| *
|
| * Examples
|
| - * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true())
|
| + * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true())
|
| * returns "gopher%3A%2F%2Fspinaltap.micro.umn.edu%2F00%2FWeather%2FCalifornia%2FLos%20Angeles%23ocean"
|
| * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), false())
|
| * returns "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles%23ocean"
|
| @@ -15003,28 +15009,28 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| xmlBufferPtr target;
|
| xmlChar *cptr;
|
| xmlChar escape[4];
|
| -
|
| +
|
| CHECK_ARITY(2);
|
| -
|
| +
|
| escape_reserved = xmlXPathPopBoolean(ctxt);
|
| -
|
| +
|
| CAST_TO_STRING;
|
| str = valuePop(ctxt);
|
| -
|
| +
|
| target = xmlBufferCreate();
|
| -
|
| +
|
| escape[0] = '%';
|
| escape[3] = 0;
|
| -
|
| +
|
| if (target) {
|
| for (cptr = str->stringval; *cptr; cptr++) {
|
| if ((*cptr >= 'A' && *cptr <= 'Z') ||
|
| (*cptr >= 'a' && *cptr <= 'z') ||
|
| (*cptr >= '0' && *cptr <= '9') ||
|
| - *cptr == '-' || *cptr == '_' || *cptr == '.' ||
|
| + *cptr == '-' || *cptr == '_' || *cptr == '.' ||
|
| *cptr == '!' || *cptr == '~' || *cptr == '*' ||
|
| *cptr == '\''|| *cptr == '(' || *cptr == ')' ||
|
| - (*cptr == '%' &&
|
| + (*cptr == '%' &&
|
| ((cptr[1] >= 'A' && cptr[1] <= 'F') ||
|
| (cptr[1] >= 'a' && cptr[1] <= 'f') ||
|
| (cptr[1] >= '0' && cptr[1] <= '9')) &&
|
| @@ -15046,7 +15052,7 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
| escape[2] = '0' + (*cptr & 0xF);
|
| else
|
| escape[2] = 'A' - 10 + (*cptr & 0xF);
|
| -
|
| +
|
| xmlBufferAdd(target, &escape[0], 3);
|
| }
|
| }
|
|
|