Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: math and locale
- X-seq: zsh-workers 8697
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: Re: PATCH: math and locale
- Date: Sat, 20 Nov 1999 20:53:31 +0000
- In-reply-to: <19991120151807.A22546@xxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
- References: <19991120151807.A22546@xxxxxxxx>
On Nov 20, 3:18pm, Clint Adams wrote:
} Subject: PATCH: math and locale
}
} This alleviates the decimal point problem by making it
} locale-independent. This reverses the previous fix
} which introduced new problems.
Here's the equivalent against 3.1.6-bart-8, for those of you who, like me,
never applied Clint's previous patch and hence don't need to reverse it.
I'm mildly concerned that setting and restoring the locale is an excessive
overhead, especially if it's a no-op (prev_local is already "POSIX" or "C").
Can anyone reassure me?
I also wonder whether "C" would not be a better choice than "POSIX" here.
Index: Src/math.c
===================================================================
@@ -184,6 +184,9 @@
static int
zzlex(void)
{
+#ifdef USE_LOCALE
+ char *prev_locale;
+#endif
int cct = 0;
yyval.type = MN_INTEGER;
@@ -356,7 +359,14 @@
if (*nptr == '.' || *nptr == 'e' || *nptr == 'E') {
/* it's a float */
yyval.type = MN_FLOAT;
+#ifdef USE_LOCALE
+ prev_locale = setlocale(LC_NUMERIC, NULL);
+ setlocale(LC_NUMERIC, "POSIX");
+#endif
yyval.u.d = strtod(ptr, &nptr);
+#ifdef USE_LOCALE
+ setlocale(LC_NUMERIC, prev_locale);
+#endif
if (ptr == nptr || *nptr == '.') {
zerr("bad floating point constant", NULL, 0);
return EOI;
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author