Date: Sat, 3 Nov 2001 14:35:15 +0000 From: Giorgos Keramidas <charon@labs.gr> To: Peter Pentchev <roam@ringlet.net> Cc: Dag-Erling Smorgrav <des@ofug.org>, Joe Abley <jabley@automagic.org>, arch@FreeBSD.ORG Subject: Re: POSIX character class support for 1Tawk Message-ID: <20011103143515.D4464@hades.hell.gr> In-Reply-To: <20011103145608.B76275@straylight.oblivion.bg> References: <xzpu1wca91d.fsf@flood.ping.uio.no> <20011102233831.L25226@buffoon.automagic.org> <xzphesca0xv.fsf@flood.ping.uio.no> <20011103012226.Q25226@buffoon.automagic.org> <xzpvggse5j4.fsf@flood.ping.uio.no> <20011103145608.B76275@straylight.oblivion.bg>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Nov 03, 2001 at 02:56:08PM +0200, Peter Pentchev wrote:
> On Sat, Nov 03, 2001 at 07:23:59AM +0100, Dag-Erling Smorgrav wrote:
> > Joe Abley <jabley@automagic.org> writes:
> > > Our isalpha() and friends are locale-sensitive, I think.
> >
> > Only if the caller has previously called setlocale().
>
> So what's the problem in calling setlocale(LC_ALL, "")
> early in main() or something, as so many other utilities in
> our base system already do?
Unfortunately enough, it's not that simple. You'd have to check for
all the possible LC_xxx environment variables. The small program
below shows what can happen if you use setlocale() with NULL instead
of the correct value.
#include <ctype.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define GREEK_ALPHA 0xe1
int main (void)
{
char *lc;
setlocale(LC_ALL, NULL);
printf("Using NULL: %s\n", isalpha(GREEK_ALPHA) ? "true" : "false");
if ((lc = getenv("LC_ALL")) == NULL) {
fprintf(stderr, "LC_ALL is not defined\n");
exit(1);
}
setlocale(LC_ALL, lc);
printf("Using getenv(): %s\n", isalpha(GREEK_ALPHA) ? "true" : "false");
return 0;
}
Which gives the output shown below:
$ cc -Wall -o blah blah.c
$ ./blah
Using NULL: false
LC_ALL is not defined
$ env LC_LANG=el_GR LC_ALL=el_GR.ISO8859-7 ./blah
Using NULL: false
Using getenv(): true
In the second case, of having the proper locale setup in the
environment, only when getenv() is used to retrieve the proper value
for setlocale() the GREEK_ALPHA character is recognized from isalpha() :/
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011103143515.D4464>
