diff --git a/ChangeLog b/ChangeLog index 4da7f324..f0bb31f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Tue Mar 19 12:15:20 CET 2002 Daniel Veillard + + * xpath.c: pretty insane thing, the xmlXPathFormatNumber() + was not serializing 1 as "1" if LC_ALL=sv_SE :-( and in the + context of ScrollKeeper, made sure that if the number is + an integer, the serialization follows the description at + http://www.w3.org/TR/xpath#section-String-Functions + Mon Mar 18 19:18:13 CET 2002 Daniel Veillard * configure.in: preparing 2.4.18 diff --git a/xpath.c b/xpath.c index 24d8dc01..3a3d4059 100644 --- a/xpath.c +++ b/xpath.c @@ -1125,6 +1125,36 @@ xmlXPathFormatNumber(double number, char buffer[], int buffersize) if (xmlXPathIsNaN(number)) { if (buffersize > (int)sizeof("NaN")) sprintf(buffer, "NaN"); + } else if (number == ((int) number)) { + char work[30]; + char *ptr, *cur; + int res, value = (int) number; + + ptr = &buffer[0]; + if (value < 0) { + *ptr++ = '-'; + value = -value; + } + if (value == 0) { + *ptr++ = '0'; + } else { + cur = &work[0]; + while (value != 0) { + res = value % 10; + value = value / 10; + *cur++ = '0' + res; + } + cur--; + while ((cur >= &work[0]) && (ptr - buffer < buffersize)) { + *ptr++ = *cur--; + } + } + if (ptr - buffer < buffersize) { + *ptr = 0; + } else if (buffersize > 0) { + ptr--; + *ptr = 0; + } } else { /* 3 is sign, decimal point, and terminating zero */ char work[DBL_DIG + EXPONENT_DIGITS + 3];