[GRASS-dev] Re: [GRASS-stats] Sys.setlocale for GRASS6.4

Glynn Clements glynn at gclements.plus.com
Sat Sep 5 14:55:24 EDT 2009


Markus Neteler wrote:

> >> @grass-dev: There are encoding issues with --interface-description
> >>    which states UTF-8 also then the actual language encoding is different:
> 
> [then -> when]
> 
> ...
> > The --interface description option needs to either determine the
> > locale's encoding via e.g. nl_langinfo() and use that in the header,
> 
> It seems to be already there?
> 
> lib/gis/parser.c:
> 
> static void G_usage_xml(void)
> {
> ...
> #if defined(HAVE_LANGINFO_H)
>     encoding = nl_langinfo(CODESET);
>     if (!encoding || strlen(encoding) == 0) {
>         encoding = "UTF-8";
>     }

That would explain the sense of déjà vu ;)

> Apparently the Windows built was missing HAVE_LANGINFO_H or it
> isn't properly set on Windows.

This probably won't exist on Windows. I think that we can get the
information from locale_charset(), declared in localcharset.h and
defined in both libintl and libgettext.

Can someone try the attached patch?

-- 
Glynn Clements <glynn at gclements.plus.com>

-------------- next part --------------
Index: lib/gis/parser.c
===================================================================
--- lib/gis/parser.c	(revision 39007)
+++ lib/gis/parser.c	(working copy)
@@ -77,6 +77,9 @@
 #if defined(HAVE_LANGINFO_H)
 #include <langinfo.h>
 #endif
+#if defined(__MINGW32__) && defined(USE_NLS)
+#include <localcharset.h>
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1311,6 +1314,11 @@
     if (!encoding || strlen(encoding) == 0) {
 	encoding = "UTF-8";
     }
+#elif defined(__MINGW32__) && defined(USE_NLS)
+    encoding = locale_charset();
+    if (!encoding || strlen(encoding) == 0) {
+	encoding = "UTF-8";
+    }
 #else
     encoding = "UTF-8";
 #endif


More information about the grass-dev mailing list