Fix locale charset detection on some BSD systems
Tested on OpenBSD 4.2
If possible, use locale_charset() in place of nl_langinfo().
This patch also reverts the minor datadir change from last changeset
as it doesn't solve the problem.
--- a/mcabber/configure.ac Sun Dec 02 10:36:42 2007 +0100
+++ b/mcabber/configure.ac Sun Dec 02 13:04:57 2007 +0100
@@ -33,7 +33,8 @@
AC_HEADER_STDC
AC_CHECK_HEADERS([arpa/inet.h fcntl.h locale.h netdb.h netinet/in.h stddef.h \
stdlib.h string.h strings.h sys/socket.h sys/time.h \
- syslog.h termios.h unistd.h getopt.h wchar.h wctype.h])
+ syslog.h termios.h unistd.h getopt.h wchar.h wctype.h \
+ localcharset.h])
AC_CHECK_HEADERS([getopt.h], , AC_MSG_ERROR([Missing header file]))
AC_VAR_TIMEZONE_EXTERNALS
@@ -189,7 +190,7 @@
# Export $datadir to the source tree.
if test x"${datadir}" != x""; then
- AC_DEFINE_DIR(DATA_DIR, "$datadir", [Data files directory])
+ AC_DEFINE_DIR(DATA_DIR, "${datadir}", [Data files directory])
fi
AC_ARG_ENABLE(debug,
--- a/mcabber/src/screen.c Sun Dec 02 10:36:42 2007 +0100
+++ b/mcabber/src/screen.c Sun Dec 02 13:04:57 2007 +0100
@@ -25,11 +25,17 @@
#include <string.h>
#include <time.h>
#include <ctype.h>
+
+#include <config.h>
#include <locale.h>
-#include <langinfo.h>
-#include <config.h>
#include <assert.h>
+#ifdef HAVE_LOCALCHARSET_H
+# include <localcharset.h>
+#else
+# include <langinfo.h>
+#endif
+
#ifdef HAVE_ASPELL_H
# include <aspell.h>
#endif
@@ -734,7 +740,11 @@
void scr_InitLocaleCharSet(void)
{
setlocale(LC_CTYPE, "");
+#ifdef HAVE_LOCALCHARSET_H
+ LocaleCharSet = locale_charset();
+#else
LocaleCharSet = nl_langinfo(CODESET);
+#endif
utf8_mode = (strcmp(LocaleCharSet, "UTF-8") == 0);
}