You should have received a copy of the GNU General Public License along
with Bash; see the file COPYING. If not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#include "config.h"
#include "bashintl.h"
#include "bashansi.h"
#include <stdio.h>
-#include <ctype.h>
+#include "chartypes.h"
#include "shell.h"
setlocale (LC_MESSAGES, lc_all);
# endif /* LC_MESSAGES */
+# if defined (LC_NUMERIC)
+ val = get_string_value ("LC_NUMERIC");
+ if (val == 0 && lc_all && *lc_all)
+ setlocale (LC_NUMERIC, lc_all);
+# endif /* LC_NUMERIC */
+
#endif /* HAVE_SETLOCALE */
val = get_string_value ("TEXTDOMAIN");
else if (var[3] == 'A') /* LC_ALL */
{
FREE (lc_all);
- lc_all = value ? savestring (value) : savestring (default_locale);
+ if (value)
+ lc_all = savestring (value);
+ else if (default_locale)
+ lc_all = savestring (default_locale);
+ else
+ {
+ lc_all = (char *)xmalloc (1);
+ lc_all[0] = '\0';
+ }
#if defined (HAVE_SETLOCALE)
- return (setlocale (LC_ALL, value) != 0);
+ return (setlocale (LC_ALL, lc_all) != 0);
#else
return (1);
#endif
else if (var[3] == 'C' && var[4] == 'T') /* LC_CTYPE */
{
if (lc_all == 0 || *lc_all == '\0')
- return (setlocale (LC_CTYPE, value) != 0);
+ return (setlocale (LC_CTYPE, value ? value : "") != 0);
}
else if (var[3] == 'C' && var[4] == 'O') /* LC_COLLATE */
{
# if defined (LC_COLLATE)
if (lc_all == 0 || *lc_all == '\0')
- return (setlocale (LC_COLLATE, value) != 0);
+ return (setlocale (LC_COLLATE, value ? value : "") != 0);
# endif /* LC_COLLATE */
}
else if (var[3] == 'M' && var[4] == 'E') /* LC_MESSAGES */
{
# if defined (LC_MESSAGES)
if (lc_all == 0 || *lc_all == '\0')
- return (setlocale (LC_MESSAGES, value) != 0);
+ return (setlocale (LC_MESSAGES, value ? value : "") != 0);
# endif /* LC_MESSAGES */
}
+ else if (var[3] == 'N' && var[4] == 'U') /* LC_NUMERIC */
+ {
+# if defined (LC_NUMERIC)
+ if (lc_all == 0 || *lc_all == '\0')
+ return (setlocale (LC_NUMERIC, value ? value : "") != 0);
+# endif /* LC_NUMERIC */
+ }
#endif /* HAVE_SETLOCALE */
return (0);
}
+#if 0
/* Called when LANG is assigned a value. Sets LC_ALL if that has not
already been set. */
+#else
+/* This no longer does anything; we rely on the C library for correct
+ behavior. */
+#endif
int
set_lang (var, value)
char *var, *value;
{
+#if 0
return ((lc_all == 0) ? set_locale_var ("LC_ALL", value) : 0);
+#else
+ return 0;
+#endif
}
/* Get the value of one of the locale variables (LC_MESSAGES, LC_CTYPE) */
if (string == 0 || *string == 0)
{
if (lenp)
- *lenp = 0;
+ *lenp = 0;
return ((char *)NULL);
}
- t = xmalloc (len + 1);
-
locale = get_locale_var ("LC_MESSAGES");
/* If we don't have setlocale() or the current locale is `C' or `POSIX',
(locale[0] == 'C' && locale[1] == '\0') || STREQ (locale, "POSIX"))
#endif
{
+ t = (char *)xmalloc (len + 1);
strcpy (t, string);
if (lenp)
*lenp = len;
translated = gettext (string);
if (translated == string) /* gettext returns its argument if untranslatable */
{
+ t = (char *)xmalloc (len + 1);
strcpy (t, string);
if (lenp)
*lenp = len;
}
else
{
- free (t);
tlen = strlen (translated);
- t = xmalloc (tlen + 1);
+ t = (char *)xmalloc (tlen + 1);
strcpy (t, translated);
if (lenp)
*lenp = tlen;