annotate lib/hard-locale.c @ 3561:74b404d45147

(alloca): Define to __builtin_alloca if __GNUC__, to avoid a warning if -Wall.
author Jim Meyering <jim@meyering.net>
date Mon, 22 Oct 2001 08:01:22 +0000
parents 216a29ec230c
children 53af3dbd40fa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1869
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* hard-locale.c -- Determine whether a locale is hard.
2807
807294ed0f4f back out Copyright date changes for files with no changes year
Jim Meyering <jim@meyering.net>
parents: 2718
diff changeset
2 Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
1869
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18 #if HAVE_CONFIG_H
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19 # include <config.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21
3561
74b404d45147 (alloca): Define to __builtin_alloca if __GNUC__,
Jim Meyering <jim@meyering.net>
parents: 2910
diff changeset
22 #if __GNUC__
74b404d45147 (alloca): Define to __builtin_alloca if __GNUC__,
Jim Meyering <jim@meyering.net>
parents: 2910
diff changeset
23 # define alloca __builtin_alloca
74b404d45147 (alloca): Define to __builtin_alloca if __GNUC__,
Jim Meyering <jim@meyering.net>
parents: 2910
diff changeset
24 #else
1869
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25 # ifdef HAVE_ALLOCA_H
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 # include <alloca.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 # else
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 # ifdef _AIX
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29 # pragma alloca
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 # else
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31 # ifdef _WIN32
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 # include <malloc.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 # include <io.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 # else
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 # ifndef alloca
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 char *alloca ();
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 # endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 # endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 # endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40 # endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43 #if HAVE_LOCALE_H
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 # include <locale.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 #if HAVE_STRING_H
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 # include <string.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 /* Return nonzero if the current CATEGORY locale is hard, i.e. if you
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 can't get away with assuming traditional C or POSIX behavior. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 int
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 hard_locale (int category)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 #if ! (defined ENABLE_NLS && HAVE_SETLOCALE)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 return 0;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 #else
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 int hard = 1;
2910
216a29ec230c (hard_locale): Revert last change -- it was simply
Jim Meyering <jim@meyering.net>
parents: 2883
diff changeset
61 char const *p = setlocale (category, 0);
1869
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 if (p)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 # if defined __GLIBC__ && __GLIBC__ >= 2
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67 hard = 0;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68 # else
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69 char *locale = alloca (strlen (p) + 1);
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 strcpy (locale, p);
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 /* Temporarily set the locale to the "C" and "POSIX" locales to
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 find their names, so that we can determine whether one or the
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 other is the caller's locale. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 if (((p = setlocale (category, "C")) && strcmp (p, locale) == 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 || ((p = setlocale (category, "POSIX")) && strcmp (p, locale) == 0))
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 hard = 0;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 /* Restore the caller's locale. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80 setlocale (category, locale);
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81 # endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 }
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84 return hard;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 }