1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-02 22:11:54 +02:00

18337: use C locale when converting floats to scalars to avoid problems in

locales where `,' is the decimal separator
This commit is contained in:
Oliver Kiddle 2003-03-11 17:29:47 +00:00
parent 1d80cc9acf
commit c7564985e5
2 changed files with 19 additions and 2 deletions

View file

@ -1,3 +1,11 @@
2003-03-11 Oliver Kiddle <opk@zsh.org>
* 18338: Completion/Base/Widget/_next_tags: list a single
unambiguous match instead of inserting it
* 18337: Src/params.c: use C locale when converting floats to scalars
to avoid problems in locales where `,' is the decimal separator
2003-03-10 Oliver Kiddle <opk@zsh.org>
* 18330: Src/math.c: save output of setlocale as the pointer it

View file

@ -3417,6 +3417,7 @@ char *
convfloat(double dval, int digits, int flags, FILE *fout)
{
char fmt[] = "%.*e";
char *prev_locale, *ret;
/*
* The difficulty with the buffer size is that a %f conversion
@ -3451,16 +3452,24 @@ convfloat(double dval, int digits, int flags, FILE *fout)
digits--;
}
}
#ifdef USE_LOCALE
prev_locale = dupstring(setlocale(LC_NUMERIC, NULL));
setlocale(LC_NUMERIC, "POSIX");
#endif
if (fout) {
fprintf(fout, fmt, digits, dval);
return NULL;
ret = NULL;
} else {
VARARR(char, buf, 512 + digits);
sprintf(buf, fmt, digits, dval);
if (!strchr(buf, 'e') && !strchr(buf, '.'))
strcat(buf, ".");
return dupstring(buf);
ret = dupstring(buf);
}
#ifdef USE_LOCALE
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
#endif
return ret;
}
/* Start a parameter scope */