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:
parent
1d80cc9acf
commit
c7564985e5
2 changed files with 19 additions and 2 deletions
|
@ -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
|
||||
|
|
13
Src/params.c
13
Src/params.c
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue