1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-08-01 10:06:59 +03:00

another patch from Richard Jinks for substring conformance update of the

* xpath.c: another patch from Richard Jinks for substring conformance
* test/XPath/expr/floats test/XPath/expr/strings
  result/XPath/expr/floats result/XPath/expr/strings: update of the
  test suite to check those.
Daniel
This commit is contained in:
Daniel Veillard
2002-04-10 16:14:34 +00:00
parent 01917aa1cb
commit 0eafdef988
6 changed files with 69 additions and 22 deletions

54
xpath.c
View File

@ -6152,34 +6152,44 @@ xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
if (nargs != 3)
le = m;
/*
* To meet our requirements, initial index calculations
* must be done before we convert to integer format
*
* First we normalize indices
/* 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)
*/
in -= 1.0;
le += in;
if (in < 0.0)
in = 0.0;
if (le > (double)m)
le = (double)m;
if (!xmlXPathIsNaN(in + le)) {
/*
* To meet our requirements, initial index calculations
* must be done before we convert to integer format
*
* First we normalize indices
*/
in -= 1.0;
le += in;
if (in < 0.0)
in = 0.0;
if (le > (double)m)
le = (double)m;
/*
* Now we go to integer form, rounding up
*/
i = (int) in;
if (((double)i) != in) i++;
/*
* Now we go to integer form, rounding up
*/
i = (int) in;
if (((double)i) != in) i++;
l = (int) le;
if (((double)l) != le) l++;
l = (int) le;
if (((double)l) != le) l++;
if (l > m) l=m;
if (l > m) l=m;
/* number of chars to copy */
l -= i;
/* number of chars to copy */
l -= i;
ret = xmlUTF8Strsub(str->stringval, i, l);
}
else {
ret = NULL;
}
ret = xmlUTF8Strsub(str->stringval, i, l);
if (ret == NULL)
valuePush(ctxt, xmlXPathNewCString(""));
else {