* THIRDPARTY: Documented lc-messages.m4.
* configure.ac: Added various locale checks.
* m4/lc-messages.m4: New file for detecting LC_MESSAGES.
* src/vm/properties.cpp: Validate locale names before passing them on to
classpath.
notice and this notice are preserved.
+* m4/lc-messages.m4
+
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+
* contrib/vmlog
Copyright (C) 2006 Edwin Steiner <edwin.steiner@gmx.net>
dnl configure.ac
dnl
-dnl Copyright (C) 1996-2005, 2006, 2007, 2008
+dnl Copyright (C) 1996-2010
dnl CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
dnl
dnl This file is part of CACAO.
AC_CHECK_HEADERS([execinfo.h])
AC_CHECK_HEADERS([fcntl.h])
AC_CHECK_HEADERS([libgen.h])
+AC_CHECK_HEADERS([locale.h])
AC_CHECK_HEADERS([netdb.h])
AC_CHECK_HEADERS([signal.h])
AC_CHECK_HEADERS([stdarg.h])
AC_CHECK_FUNCS([scandir])
AC_CHECK_FUNCS([select])
AC_CHECK_FUNCS([send])
+AC_CHECK_FUNCS([setlocale])
AC_CHECK_FUNCS([setsockopt])
AC_CHECK_FUNCS([shutdown])
AC_CHECK_FUNCS([socket])
AC_CHECK_FUNCS([time])
AC_CHECK_FUNCS([write])
+AM_LC_MESSAGES
dnl Checks for libraries.
--- /dev/null
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+# serial 2
+
+AC_DEFUN([AM_LC_MESSAGES],
+ [if test $ac_cv_header_locale_h = yes; then
+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+ if test $am_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
+ [Define if your <locale.h> file defines LC_MESSAGES.])
+ fi
+ fi])
+
/* src/vm/properties.cpp - handling commandline properties
- Copyright (C) 1996-2005, 2006, 2007, 2008
+ Copyright (C) 1996-2010
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
#include "vm/jit/asmpart.h"
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
/**
* Constructor fills the properties list with default values.
/* get locale */
+ bool use_en_US = true;
if (env_lang != NULL) {
- /* get the local stuff from the environment */
-
- if (strlen(env_lang) <= 2) {
- put("user.language", env_lang);
- }
- else {
- if ((env_lang[2] == '_') && (strlen(env_lang) >= 5)) {
+#if defined(HAVE_SETLOCALE) && defined(HAVE_LC_MESSAGES)
+ /* get the locale stuff from the environment */
+ char *locale;
+
+ if ((locale = setlocale(LC_MESSAGES, ""))) {
+ int len = strlen(locale);
+ if (((len >= 5) && (locale[2] == '_')) || len == 2) {
+ use_en_US = false;
char* lang = MNEW(char, 3);
- strncpy(lang, (char*) &env_lang[0], 2);
+ strncpy(lang, (char*) &locale[0], 2);
lang[2] = '\0';
+ put("user.language", lang);
- char* country = MNEW(char, 3);
- strncpy(country, (char*) &env_lang[3], 2);
- country[2] = '\0';
+ if (len >= 5) {
+ char* country = MNEW(char, 3);
+ strncpy(country, (char*) &locale[3], 2);
+ country[2] = '\0';
- put("user.language", lang);
- put("user.country", country);
+ put("user.country", country);
+ }
}
}
+#endif
}
- else {
+ if (use_en_US) {
/* if no default locale was specified, use `en_US' */
put("user.language", "en");