mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-08-01 10:06:59 +03:00
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:
30
xpath.c
30
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];
|
||||
|
Reference in New Issue
Block a user