pretty insane thing, the xmlXPathFormatNumber() was not serializing 1 as

* 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
Daniel
This commit is contained in:
Daniel Veillard 2002-03-19 11:25:30 +00:00
parent 34ce8bece2
commit 28cac6b5a9
2 changed files with 38 additions and 0 deletions

View File

@ -1,3 +1,11 @@
Tue Mar 19 12:15:20 CET 2002 Daniel Veillard <daniel@veillard.com>
* 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 <daniel@veillard.com>
* configure.in: preparing 2.4.18

30
xpath.c
View File

@ -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];