From 28cac6b5a9558001844e02f00bfddda211b466d2 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Tue, 19 Mar 2002 11:25:30 +0000 Subject: [PATCH] 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 --- ChangeLog | 8 ++++++++ xpath.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) 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];