mirror of
https://github.com/reactos/reactos.git
synced 2025-08-01 17:03:00 +00:00
[LIBXML2] Update to version 2.9.13. CORE-17766
This commit is contained in:
parent
df1adce32c
commit
7244e0c5c6
35 changed files with 1127 additions and 20110 deletions
68
sdk/lib/3rdparty/libxml2/xpointer.c
vendored
68
sdk/lib/3rdparty/libxml2/xpointer.c
vendored
|
@ -851,7 +851,6 @@ static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name);
|
|||
*
|
||||
* Dirty macros, i.e. one need to make assumption on the context to use them
|
||||
*
|
||||
* CUR_PTR return the current pointer to the xmlChar to be parsed.
|
||||
* CUR returns the current xmlChar value, i.e. a 8 bit value
|
||||
* in ISO-Latin or UTF-8.
|
||||
* This should be used internally by the parser
|
||||
|
@ -871,7 +870,6 @@ static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name);
|
|||
#define CUR (*ctxt->cur)
|
||||
#define SKIP(val) ctxt->cur += (val)
|
||||
#define NXT(val) ctxt->cur[(val)]
|
||||
#define CUR_PTR ctxt->cur
|
||||
|
||||
#define SKIP_BLANKS \
|
||||
while (IS_BLANK_CH(*(ctxt->cur))) NEXT
|
||||
|
@ -999,9 +997,10 @@ xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
|
|||
}
|
||||
|
||||
if (xmlStrEqual(name, (xmlChar *) "xpointer")) {
|
||||
const xmlChar *left = CUR_PTR;
|
||||
const xmlChar *oldBase = ctxt->base;
|
||||
const xmlChar *oldCur = ctxt->cur;
|
||||
|
||||
CUR_PTR = buffer;
|
||||
ctxt->cur = ctxt->base = buffer;
|
||||
/*
|
||||
* To evaluate an xpointer scheme element (4.3) we need:
|
||||
* context initialized to the root
|
||||
|
@ -1012,42 +1011,49 @@ xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
|
|||
ctxt->context->proximityPosition = 1;
|
||||
ctxt->context->contextSize = 1;
|
||||
xmlXPathEvalExpr(ctxt);
|
||||
CUR_PTR=left;
|
||||
ctxt->base = oldBase;
|
||||
ctxt->cur = oldCur;
|
||||
} else if (xmlStrEqual(name, (xmlChar *) "element")) {
|
||||
const xmlChar *left = CUR_PTR;
|
||||
const xmlChar *oldBase = ctxt->base;
|
||||
const xmlChar *oldCur = ctxt->cur;
|
||||
xmlChar *name2;
|
||||
|
||||
CUR_PTR = buffer;
|
||||
ctxt->cur = ctxt->base = buffer;
|
||||
if (buffer[0] == '/') {
|
||||
xmlXPathRoot(ctxt);
|
||||
xmlXPtrEvalChildSeq(ctxt, NULL);
|
||||
} else {
|
||||
name2 = xmlXPathParseName(ctxt);
|
||||
if (name2 == NULL) {
|
||||
CUR_PTR = left;
|
||||
ctxt->base = oldBase;
|
||||
ctxt->cur = oldCur;
|
||||
xmlFree(buffer);
|
||||
xmlFree(name);
|
||||
XP_ERROR(XPATH_EXPR_ERROR);
|
||||
}
|
||||
xmlXPtrEvalChildSeq(ctxt, name2);
|
||||
}
|
||||
CUR_PTR = left;
|
||||
ctxt->base = oldBase;
|
||||
ctxt->cur = oldCur;
|
||||
#ifdef XPTR_XMLNS_SCHEME
|
||||
} else if (xmlStrEqual(name, (xmlChar *) "xmlns")) {
|
||||
const xmlChar *left = CUR_PTR;
|
||||
const xmlChar *oldBase = ctxt->base;
|
||||
const xmlChar *oldCur = ctxt->cur;
|
||||
xmlChar *prefix;
|
||||
xmlChar *URI;
|
||||
xmlURIPtr value;
|
||||
|
||||
CUR_PTR = buffer;
|
||||
ctxt->cur = ctxt->base = buffer;
|
||||
prefix = xmlXPathParseNCName(ctxt);
|
||||
if (prefix == NULL) {
|
||||
ctxt->base = oldBase;
|
||||
ctxt->cur = oldCur;
|
||||
xmlFree(buffer);
|
||||
xmlFree(name);
|
||||
XP_ERROR(XPTR_SYNTAX_ERROR);
|
||||
}
|
||||
SKIP_BLANKS;
|
||||
if (CUR != '=') {
|
||||
ctxt->base = oldBase;
|
||||
ctxt->cur = oldCur;
|
||||
xmlFree(prefix);
|
||||
xmlFree(buffer);
|
||||
xmlFree(name);
|
||||
|
@ -1055,27 +1061,10 @@ xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
|
|||
}
|
||||
NEXT;
|
||||
SKIP_BLANKS;
|
||||
/* @@ check escaping in the XPointer WD */
|
||||
|
||||
value = xmlParseURI((const char *)ctxt->cur);
|
||||
if (value == NULL) {
|
||||
xmlFree(prefix);
|
||||
xmlFree(buffer);
|
||||
xmlFree(name);
|
||||
XP_ERROR(XPTR_SYNTAX_ERROR);
|
||||
}
|
||||
URI = xmlSaveUri(value);
|
||||
xmlFreeURI(value);
|
||||
if (URI == NULL) {
|
||||
xmlFree(prefix);
|
||||
xmlFree(buffer);
|
||||
xmlFree(name);
|
||||
XP_ERROR(XPATH_MEMORY_ERROR);
|
||||
}
|
||||
|
||||
xmlXPathRegisterNs(ctxt->context, prefix, URI);
|
||||
CUR_PTR = left;
|
||||
xmlFree(URI);
|
||||
xmlXPathRegisterNs(ctxt->context, prefix, ctxt->cur);
|
||||
ctxt->base = oldBase;
|
||||
ctxt->cur = oldCur;
|
||||
xmlFree(prefix);
|
||||
#endif /* XPTR_XMLNS_SCHEME */
|
||||
} else {
|
||||
|
@ -1470,16 +1459,16 @@ xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
|
|||
return(list);
|
||||
} else {
|
||||
tmp = xmlCopyNode(cur, 0);
|
||||
if (list == NULL)
|
||||
if (list == NULL) {
|
||||
list = tmp;
|
||||
else {
|
||||
parent = tmp;
|
||||
} else {
|
||||
if (last != NULL)
|
||||
xmlAddNextSibling(last, tmp);
|
||||
parent = xmlAddNextSibling(last, tmp);
|
||||
else
|
||||
xmlAddChild(parent, tmp);
|
||||
parent = xmlAddChild(parent, tmp);
|
||||
}
|
||||
last = NULL;
|
||||
parent = tmp;
|
||||
|
||||
if (index2 > 1) {
|
||||
end = xmlXPtrGetNthChild(cur, index2 - 1);
|
||||
|
@ -1561,8 +1550,7 @@ xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
|
|||
if (last != NULL)
|
||||
xmlAddNextSibling(last, tmp);
|
||||
else {
|
||||
xmlAddChild(parent, tmp);
|
||||
last = tmp;
|
||||
last = xmlAddChild(parent, tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue