[svn] gpg-error - r228 - in trunk: . src

svn author wk cvs at cvs.gnupg.org
Thu Jan 21 13:41:22 CET 2010


Author: wk
Date: 2010-01-21 13:41:21 +0100 (Thu, 21 Jan 2010)
New Revision: 228

Added:
   trunk/src/init.h
   trunk/src/w32-add.h
Removed:
   trunk/src/w32-gettext.h
Modified:
   trunk/ChangeLog
   trunk/README
   trunk/src/Makefile.am
   trunk/src/errnos.in
   trunk/src/gettext.h
   trunk/src/gpg-error.c
   trunk/src/gpg-error.def.in
   trunk/src/init.c
   trunk/src/mkstrtable.awk
   trunk/src/w32-gettext.c
Log:
Finished W32CE support.


[The diff below has been truncated]

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/ChangeLog	2010-01-21 12:41:21 UTC (rev 228)
@@ -1,3 +1,52 @@
+2010-01-21  Werner Koch  <wk at g10code.com>
+
+	* src/mkstrtable.awk (END): Do not print PREFIX before
+	LAST_MSGSTR.
+
+	* src/init.c (get_locale_dir): Rework to match what gnupg is doing.
+	(get_root_key, read_w32_registry_string): Remove.
+	* src/gpg-error.c (get_locale_dir): Replace by code from init.c
+	(get_root_key, read_w32_registry_string): Remove.
+
+2010-01-20  Werner Koch  <wk at g10code.com>
+
+	* src/init.c (gpg_err_init): Factor code out to ..
+	(real_init): .. new.
+
+	* src/Makefile.am (gpg_error_SOURCES): Remove arch_sources.
+	(export_symbols): Do not prefix gpg-error-def with srcdir.
+
+2010-01-19  Werner Koch  <wk at g10code.com>
+
+	* src/init.c (DllMain): Call _w32_gettext_init.
+	(get_tls): Use it also for standard Windows.
+	(DllMain): Ditto.
+	(struct tls_space_s): Move to ..
+	(get_tls): Make global.
+	* src/init.h: .. New.
+	* src/gettext.h: Do not include w32-gettext.h.
+	* src/w32-gettext.c: Replace by version from GnuPG.
+	(my_nl_locale_name) [W32CE]: Do not use getenv.  Use
+	GetSystemDefaultLCID.
+	(struct loaded_domain): Use uint16_t for NSTRINGS and MAPPED to
+	save space.
+	(load_domain): Check for too large MO files.
+	(utf8_to_wchar): Use gpg_err_set_errno.
+	(bindtextdomain): Rename to _gpg_w32_bindtextdomain.
+	(textdomain): Rename to _gpg_w32_textdomain.
+	(gettext): Rename to _gpg_w32_gettext.
+	(dgettext): Rename to _gpg_w32_dgettext.
+	(ngettext): Remove.
+	(gettext_localename): Rename to _gpg_w32_gettext_localename.
+	(gettext_select_utf8): Rename to _gpg_w32_gettext_use_utf8.
+	(_gpg_w32_bindtextdomain): Change to only register the directory.
+	Return the current directory if asked to.
+	(do_gettext): Add DOMAINNAME arg and take care of it.
+	* src/w32-add.h: New.
+	* src/w32-gettext.h: Remove.
+	* src/Makefile.am (extra-h.in): Process w32-add.h.
+	(arch_sources): Remove w32-gettext.h.
+
 2010-01-18  Werner Koch  <wk at g10code.com>
 
 	* src/init.c (wchar_to_utf8, utf8_to_wchar): New.

Modified: trunk/README
===================================================================
--- trunk/README	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/README	2010-01-21 12:41:21 UTC (rev 228)
@@ -76,6 +76,19 @@
    published via the announcement list and probably via Usenet.
 
 
+Hints
+-----
+
+To build for Windows you you may use the convenience command:
+
+   ./autogen.sh --build-w32
+
+which runs configure with suitable options.  For WindowsCE the command
+is:
+
+   ./autogen.sh --build-w32ce
+
+
 Known Problems
 --------------
 

Modified: trunk/src/Makefile.am
===================================================================
--- trunk/src/Makefile.am	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/Makefile.am	2010-01-21 12:41:21 UTC (rev 228)
@@ -38,11 +38,10 @@
 m4datadir = $(datadir)/aclocal
 m4data_DATA = gpg-error.m4
 
-
 EXTRA_DIST = mkstrtable.awk err-sources.h.in err-codes.h.in \
 	mkerrnos.awk errnos.in README \
 	mkerrcodes.awk mkerrcodes1.awk mkerrcodes2.awk mkerrcodes.c \
-	mkheader.awk gpg-error.h.in mkw32errmap.c w32ce-add.h \
+	mkheader.awk gpg-error.h.in mkw32errmap.c w32-add.h w32ce-add.h \
 	err-sources.h err-codes.h gpg-error-config.in gpg-error.m4 \
 	gpg-error.def.in versioninfo.rc.in
 
@@ -58,7 +57,7 @@
 	extra-h.in $(tmp_files)
 
 if HAVE_W32_SYSTEM
-arch_sources = w32-gettext.h w32-gettext.c
+arch_sources = w32-gettext.c
 
 RCCOMPILE = $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
             -DLOCALEDIR=\"$(localedir)\" $(AM_CPPFLAGS) $(CPPFLAGS)
@@ -71,7 +70,7 @@
 
 gpg_error_res = versioninfo.lo
 no_undefined = -no-undefined
-export_symbols = -export-symbols $(srcdir)/gpg-error.def
+export_symbols = -export-symbols gpg-error.def
 
 install-def-file: gpg-error.def
 	$(INSTALL) gpg-error.def $(DESTDIR)$(libdir)/gpg-error.def
@@ -100,7 +99,7 @@
   $(no_undefined) $(export_symbols)
 
 libgpg_error_la_SOURCES = gpg-error.h gettext.h $(arch_sources) \
-	init.c strsource.c strerror.c code-to-errno.c code-from-errno.c
+	init.c init.h strsource.c strerror.c code-to-errno.c code-from-errno.c
 
 # Note that RCCOMPILE needs the same defines as ..._la_CPPFLAGS but
 # without the extra_cppflags because they may include am -idirafter
@@ -108,7 +107,7 @@
 libgpg_error_la_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" $(extra_cppflags)
 libgpg_error_la_LIBADD = $(gpg_error_res) $(intllibs)
 
-gpg_error_SOURCES = strsource-sym.c strerror-sym.c gpg-error.c $(arch_sources)
+gpg_error_SOURCES = strsource-sym.c strerror-sym.c gpg-error.c 
 gpg_error_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" $(extra_cppflags)
 gpg_error_LDADD = ./libgpg-error.la @LTLIBINTL@
 
@@ -175,10 +174,13 @@
 		-v prefix=GPG_ERR_ -v namespace=errnos_ \
 		$(srcdir)/errnos.in >$@
 
-extra-h.in: Makefile w32ce-add.h
+extra-h.in: Makefile w32-add.h w32ce-add.h
 	-rm extra-h.in
+if HAVE_W32_SYSTEM
+	cat $(srcdir)/w32-add.h >>extra-h.in
+endif	
 if HAVE_W32CE_SYSTEM
-	cat $(srcdir)/w32ce-add.h >extra-h.in
+	cat $(srcdir)/w32ce-add.h >>extra-h.in
 endif	
 	echo EOF >>extra-h.in
 

Modified: trunk/src/errnos.in
===================================================================
--- trunk/src/errnos.in	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/errnos.in	2010-01-21 12:41:21 UTC (rev 228)
@@ -169,4 +169,4 @@
 137	EUSERS
 138	EWOULDBLOCK
 139	EXDEV
-140	EXFULL
+140	EXFULL
\ No newline at end of file

Modified: trunk/src/gettext.h
===================================================================
--- trunk/src/gettext.h	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/gettext.h	2010-01-21 12:41:21 UTC (rev 228)
@@ -23,15 +23,14 @@
 #if ENABLE_NLS
 
 #if HAVE_W32_SYSTEM
-/* Redirect the gettext calls to an internal implementation on W32
-   targets.  */
-# include "w32-gettext.h"
-#else
-/* Get declarations of GNU message catalog functions.  */
+  /* We have a gettext implementation in gpg-error.h which get
+     included anyway.  */
+#else /*!HAVE_W32_SYSTEM*/
+  /* Get declarations of GNU message catalog functions.  */
 # include <libintl.h>
-#endif
+#endif /*!HAVE_W32_SYSTEM*/
 
-#else
+#else /*!ENABLE_NLS*/
 
 /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
    chokes if dcgettext is defined as a macro.  So include it now, to make
@@ -61,7 +60,7 @@
 # define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
 # define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
 
-#endif
+#endif /*!ENABLE_NLS*/
 
 /* A pseudo function call that serves as a marker for the automated
    extraction of messages, but does not call gettext().  The run-time
@@ -72,4 +71,6 @@
    initializer for static 'char[]' or 'const char[]' variables.  */
 #define gettext_noop(String) String
 
+
+
 #endif /* _LIBGETTEXT_H */

Modified: trunk/src/gpg-error.c
===================================================================
--- trunk/src/gpg-error.c	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/gpg-error.c	2010-01-21 12:41:21 UTC (rev 228)
@@ -66,17 +66,22 @@
 {
 #ifdef ENABLE_NLS
   char *locale_dir;
-
-# ifdef HAVE_LC_MESSAGES
+  
+#ifdef HAVE_LC_MESSAGES
   setlocale (LC_TIME, "");
   setlocale (LC_MESSAGES, "");
-# else
-#   ifdef HAVE_W32_SYSTEM
-#     warning setlocal is missing
-#   else
-      setlocale (LC_ALL, "" );
-#   endif
+#else
+# ifndef HAVE_W32_SYSTEM
+  setlocale (LC_ALL, "" );
 # endif
+#endif
+  
+  /* Note that for this program we would only need the textdomain call
+     because libgpg-error already initializes itself to its locale dir
+     (via gpg_err_init or a constructor).  However this is only done
+     for the static standard locale and thus if the above setlocale
+     calls select a different locale the bindtext below will do
+     something else.  */
 
   locale_dir = get_locale_dir ();
   if (locale_dir)
@@ -93,155 +98,57 @@
 
 #include <windows.h>
 
-static HKEY
-get_root_key(const char *root)
-{
-  HKEY root_key;
 
-  if( !root )
-    root_key = HKEY_CURRENT_USER;
-  else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) )
-    root_key = HKEY_CLASSES_ROOT;
-  else if( !strcmp( root, "HKEY_CURRENT_USER" ) )
-    root_key = HKEY_CURRENT_USER;
-  else if( !strcmp( root, "HKEY_LOCAL_MACHINE" ) )
-    root_key = HKEY_LOCAL_MACHINE;
-  else if( !strcmp( root, "HKEY_USERS" ) )
-    root_key = HKEY_USERS;
-  else if( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) )
-    root_key = HKEY_PERFORMANCE_DATA;
-  else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) )
-    root_key = HKEY_CURRENT_CONFIG;
-  else
-    return NULL;
-  return root_key;
-}
-
-/****************
- * Return a string from the Win32 Registry or NULL in case of
- * error.  Caller must release the return value.   A NULL for root
- * is an alias for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn.
- * NOTE: The value is allocated with a plain malloc() - use free() and not
- * the usual xfree()!!!
- */
 static char *
-read_w32_registry_string( const char *root, const char *dir, const char *name )
+get_locale_dir (void)
 {
-  HKEY root_key, key_handle;
-  DWORD n1, nbytes, type;
-  char *result = NULL;
+  static wchar_t moddir[MAX_PATH+5];
+  char *result, *p;
+  int nbytes;
 
-  if ( !(root_key = get_root_key(root) ) )
-    return NULL;
+  if (!GetModuleFileNameW (NULL, moddir, MAX_PATH))
+    *moddir = 0;
 
-  if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) )
+#define SLDIR "\\share\\locale"
+  if (*moddir)
     {
-      if (root)
-	return NULL; /* no need for a RegClose, so return direct */
-      /* It seems to be common practise to fall back to HKLM. */
-      if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
-	return NULL; /* still no need for a RegClose, so return direct */
+      nbytes = WideCharToMultiByte (CP_UTF8, 0, moddir, -1, NULL, 0, NULL, NULL);
+      if (nbytes < 0)
+        return NULL;
+      
+      result = malloc (nbytes + strlen (SLDIR) + 1);
+      if (result)
+        {
+          nbytes = WideCharToMultiByte (CP_UTF8, 0, moddir, -1,
+                                        result, nbytes, NULL, NULL);
+          if (nbytes < 0)
+            {
+              free (result);
+              result = NULL;
+            }
+          else
+            {
+              p = strrchr (result, '\\');
+              if (p)
+                *p = 0;
+              strcat (result, SLDIR);
+            }
+        }
     }
-
-  nbytes = 1;
-  if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) ) {
-    if (root)
-      goto leave;
-    /* Try to fallback to HKLM also vor a missing value.  */
-    RegCloseKey (key_handle);
-    if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
-      return NULL; /* Nope.  */
-    if (RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes))
-      goto leave;
-  }
-  result = malloc( (n1=nbytes+1) );
-  if( !result )
-    goto leave;
-  if( RegQueryValueEx( key_handle, name, 0, &type, result, &n1 ) ) {
-    free(result); result = NULL;
-    goto leave;
-  }
-  result[nbytes] = 0; /* make sure it is really a string  */
-#ifndef HAVE_W32CE_SYSTEM
-  if (type == REG_EXPAND_SZ && strchr (result, '%')) {
-    char *tmp;
-
-    n1 += 1000;
-    tmp = malloc (n1+1);
-    if (!tmp)
-      goto leave;
-    nbytes = ExpandEnvironmentStrings (result, tmp, n1);
-    if (nbytes && nbytes > n1) {
-      free (tmp);
-      n1 = nbytes;
-      tmp = malloc (n1 + 1);
-      if (!tmp)
-	goto leave;
-      nbytes = ExpandEnvironmentStrings (result, tmp, n1);
-      if (nbytes && nbytes > n1) {
-	free (tmp); /* oops - truncated, better don't expand at all */
-	goto leave;
-      }
-      tmp[nbytes] = 0;
-      free (result);
-      result = tmp;
-    }
-    else if (nbytes) { /* okay, reduce the length */
-      tmp[nbytes] = 0;
-      free (result);
-      result = malloc (strlen (tmp)+1);
-      if (!result)
-	result = tmp;
-      else {
-	strcpy (result, tmp);
-	free (tmp);
-      }
-    }
-    else {  /* error - don't expand */
-      free (tmp);
-    }
-  }
-#endif /*HAVE_W32CE_SYSTEM*/
-
- leave:
-  RegCloseKey( key_handle );
+  else /* Use the old default value.  */
+    {
+      result = malloc (10 + strlen (SLDIR) + 1);
+      if (result)
+        {
+          strcpy (result, "c:\\gnupg");
+          strcat (result, SLDIR);
+        }
+    }  
+#undef SLDIR  
   return result;
 }
 
 
-#define REGKEY "Software\\GNU\\GnuPG"
-
-static char *
-get_locale_dir (void)
-{
-  char *instdir;
-  char *p;
-  char *dname;
-
-  instdir = read_w32_registry_string ("HKEY_LOCAL_MACHINE", REGKEY,
-				      "Install Directory");
-  if (!instdir)
-    return NULL;
-  
-  /* Build the key: "<instdir>/share/locale".  */
-#define SLDIR "\\share\\locale"
-  dname = malloc (strlen (instdir) + strlen (SLDIR) + 1);
-  if (!dname)
-    {
-      free (instdir);
-      return NULL;
-    }
-  p = dname;
-  strcpy (p, instdir);
-  p += strlen (instdir);
-  strcpy (p, SLDIR);
-  
-  free (instdir);
-  
-  return dname;
-}
-
-
 static void
 drop_locale_dir (char *locale_dir)
 {

Modified: trunk/src/gpg-error.def.in
===================================================================
--- trunk/src/gpg-error.def.in	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/gpg-error.def.in	2010-01-21 12:41:21 UTC (rev 228)
@@ -5,16 +5,24 @@
 #include <config.h>
 
 EXPORTS
- gpg_strerror             @1
- gpg_strerror_r           @2  
- gpg_strsource            @3  
- gpg_err_code_from_errno  @4
- gpg_err_code_to_errno    @5
- gpg_err_init		  @6
- gpg_err_code_from_syserror @7
+ gpg_strerror                 @1
+ gpg_strerror_r               @2  
+ gpg_strsource                @3  
+ gpg_err_code_from_errno      @4
+ gpg_err_code_to_errno        @5
+ gpg_err_init		      @6
+ gpg_err_code_from_syserror   @7
+ gpg_err_set_errno            @8
 #ifdef HAVE_W32CE_SYSTEM
- _gpg_w32ce_strerror       @8
- _gpg_w32ce_get_errno      @9
+   _gpg_w32ce_get_errno       @9
+   _gpg_w32ce_strerror        @10
 #endif
- gpg_err_set_errno        @10
-
+#ifdef HAVE_W32_SYSTEM
+   _gpg_w32_bindtextdomain     @11
+   _gpg_w32_textdomain         @12
+   _gpg_w32_gettext            @13
+   _gpg_w32_dgettext           @14
+   _gpg_w32_dngettext          @15
+   _gpg_w32_gettext_localename @16
+   _gpg_w32_gettext_use_utf8   @17
+#endif

Modified: trunk/src/init.c
===================================================================
--- trunk/src/init.c	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/init.c	2010-01-21 12:41:21 UTC (rev 228)
@@ -1,5 +1,5 @@
 /* init.c - Initialize the GnuPG error library.
-   Copyright (C) 2005 g10 Code GmbH
+   Copyright (C) 2005, 2010 g10 Code GmbH
 
    This file is part of libgpg-error.
 
@@ -14,9 +14,8 @@
    Lesser General Public License for more details.
  
    You should have received a copy of the GNU Lesser General Public
-   License along with libgpg-error; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
 
 #if HAVE_CONFIG_H
 #include <config.h>
@@ -30,22 +29,13 @@
 #include <gpg-error.h>
 
 #include "gettext.h"
+#include "init.h"
 
 
 /* Locale directory support.  */
 
 #if HAVE_W32_SYSTEM
 
-/* 119 bytes for an error message should be enough.  With this size we
-   can assume that the allocation does not take up more than 128 bytes
-   per thread.  */
-#define STRBUFFER_SIZE 120
-
-/* The TLS space definition. */
-struct tls_space_s
-{
-  char strerror_buffer[STRBUFFER_SIZE];
-};
 static int tls_index;  /* Index for the TLS functions.  */ 
 
 static char *get_locale_dir (void);
@@ -59,15 +49,13 @@
 #endif /*!HAVE_W32_SYSTEM*/
 
 
-/* Initialize the library.  This function should be run early.  */
-gpg_error_t
-gpg_err_init (void)
+static void
+real_init (void)
 {
 #ifdef ENABLE_NLS
   char *locale_dir;
 
   /* We only have to bind our locale directory to our text domain.  */
-
   locale_dir = get_locale_dir ();
   if (locale_dir)
     {
@@ -75,7 +63,22 @@
       drop_locale_dir (locale_dir);
     }
 #endif
+}
 
+/* Initialize the library.  This function should be run early.  */
+gpg_error_t
+gpg_err_init (void)
+{
+#ifdef HAVE_W32_SYSTEM
+  /* We always have a constructor and thus this function is called
+     automatically.  Due to the way the C init code of mingw works,
+     the constructors are called before our DllMain function is
+     called.  The problem with that is that the TLS has not been setup
+     and w32-gettext.c requires TLS.  To solve this we do nothing here
+     but call the actual init code from our DllMain.  */
+#else
+  real_init ();
+#endif
   return 0;
 }
 
@@ -146,164 +149,56 @@
 }
 
 
-
-static HKEY
-get_root_key(const char *root)
-{
-  HKEY root_key;
-
-  if( !root )
-    root_key = HKEY_CURRENT_USER;
-  else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) )
-    root_key = HKEY_CLASSES_ROOT;
-  else if( !strcmp( root, "HKEY_CURRENT_USER" ) )
-    root_key = HKEY_CURRENT_USER;
-  else if( !strcmp( root, "HKEY_LOCAL_MACHINE" ) )
-    root_key = HKEY_LOCAL_MACHINE;
-  else if( !strcmp( root, "HKEY_USERS" ) )
-    root_key = HKEY_USERS;
-  else if( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) )
-    root_key = HKEY_PERFORMANCE_DATA;
-  else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) )
-    root_key = HKEY_CURRENT_CONFIG;
-  else
-    return NULL;
-  return root_key;
-}
-
-/****************
- * Return a string from the Win32 Registry or NULL in case of
- * error.  Caller must release the return value.   A NULL for root
- * is an alias for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn.
- * NOTE: The value is allocated with a plain malloc() - use free() and not
- * the usual xfree()!!!
- */
 static char *
-read_w32_registry_string( const char *root, const char *dir, const char *name )
+get_locale_dir (void)
 {
-  HKEY root_key, key_handle;
-  DWORD n1, nbytes, type;
-  char *result = NULL;
+  static wchar_t moddir[MAX_PATH+5];
+  char *result, *p;
+  int nbytes;
 
-  if ( !(root_key = get_root_key(root) ) )
-    return NULL;
+  if (!GetModuleFileNameW (NULL, moddir, MAX_PATH))
+    *moddir = 0;
 
-  if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) )
+#define SLDIR "\\share\\locale"
+  if (*moddir)
     {
-      if (root)
-	return NULL; /* no need for a RegClose, so return direct */
-      /* It seems to be common practise to fall back to HKLM. */
-      if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
-	return NULL; /* still no need for a RegClose, so return direct */
-    }
-
-  nbytes = 1;
-  if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) ) 
-    {
-      if (root)
-        goto leave;
-      /* Try to fallback to HKLM also vor a missing value.  */
-      RegCloseKey (key_handle);
-      if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
-        return NULL; /* Nope.  */
-      if (RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes))
-        goto leave;
-    }
-  result = malloc ( (n1=nbytes+1) );
-  if( !result )
-    goto leave;
-  if( RegQueryValueEx( key_handle, name, 0, &type, result, &n1 ) ) 
-    {
-      free(result); result = NULL;
-      goto leave;
-    }
-  result[nbytes] = 0; /* make sure it is really a string  */
-
-#ifndef HAVE_W32CE_SYSTEM  /* W32CE has no environment variables.  */
-  if (type == REG_EXPAND_SZ && strchr (result, '%')) 
-    {
-      char *tmp;
+      nbytes = WideCharToMultiByte (CP_UTF8, 0, moddir, -1, NULL, 0, NULL, NULL);
+      if (nbytes < 0)
+        return NULL;
       
-      n1 += 1000;
-      tmp = malloc (n1+1);
-      if (!tmp)
-        goto leave;
-      nbytes = ExpandEnvironmentStrings (result, tmp, n1);
-      if (nbytes && nbytes > n1) 
+      result = malloc (nbytes + strlen (SLDIR) + 1);
+      if (result)
         {
-          free (tmp);
-          n1 = nbytes;
-          tmp = malloc (n1 + 1);
-          if (!tmp)
-            goto leave;
-          nbytes = ExpandEnvironmentStrings (result, tmp, n1);
-          if (nbytes && nbytes > n1)
+          nbytes = WideCharToMultiByte (CP_UTF8, 0, moddir, -1,
+                                        result, nbytes, NULL, NULL);
+          if (nbytes < 0)
             {
-              free (tmp); /* oops - truncated, better don't expand at all */
-              goto leave;
+              free (result);
+              result = NULL;
             }
-          tmp[nbytes] = 0;
-          free (result);
-          result = tmp;
+          else
+            {
+              p = strrchr (result, '\\');
+              if (p)
+                *p = 0;
+              strcat (result, SLDIR);
+            }
         }
-      else if (nbytes) /* okay, reduce the length */
+    }
+  else /* Use the old default value.  */
+    {
+      result = malloc (10 + strlen (SLDIR) + 1);
+      if (result)
         {
-          tmp[nbytes] = 0;
-          free (result);
-          result = malloc (strlen (tmp)+1);
-          if (!result)
-            result = tmp;
-          else {
-            strcpy (result, tmp);
-            free (tmp);
-          }
+          strcpy (result, "c:\\gnupg");
+          strcat (result, SLDIR);
         }
-      else /* error - don't expand */
-        {
-          free (tmp);
-        }
-    }
-#endif /*HAVE_W32CE_SYSTEM*/
-
- leave:
-  RegCloseKey( key_handle );
+    }  
+#undef SLDIR  
   return result;
 }
 
 
-#define REGKEY "Software\\GNU\\GnuPG"
-
-static char *
-get_locale_dir (void)
-{
-  char *instdir;
-  char *p;
-  char *dname;
-
-  instdir = read_w32_registry_string ("HKEY_LOCAL_MACHINE", REGKEY,
-				      "Install Directory");
-  if (!instdir)
-    return NULL;
-  
-  /* Build the key: "<instdir>/share/locale".  */
-#define SLDIR "\\share\\locale"
-  dname = malloc (strlen (instdir) + strlen (SLDIR) + 1);
-  if (!dname)
-    {
-      free (instdir);
-      return NULL;
-    }
-  p = dname;
-  strcpy (p, instdir);
-  p += strlen (instdir);
-  strcpy (p, SLDIR);
-  
-  free (instdir);
-  
-  return dname;
-}
-
-
 static void
 drop_locale_dir (char *locale_dir)
 {
@@ -313,8 +208,7 @@
 
 /* Return the tls object.  This function is guaranteed to return a
    valid non-NULL object.  */
-#ifdef HAVE_W32CE_SYSTEM
-static struct tls_space_s *
+struct tls_space_s *
 get_tls (void)
 {
   struct tls_space_s *tls;
@@ -330,13 +224,14 @@
           /* No way to continue - commit suicide.  */
           abort ();
         }
+      tls->gt_use_utf8 = 0;
       TlsSetValue (tls_index, tls);
     }
         
   return tls;
 }
-#endif /*HAVE_W32CE_SYSTEM*/
 
+
 /* Return the value of the ERRNO variable.  This needs to be a
    function so that we can have a per-thread ERRNO.  This is used only
    on WindowsCE because that OS misses an errno.   */
@@ -397,10 +292,7 @@
 }
 
 
-/* Entry point called by the DLL loader.  This is only used by
-   WindowsCE for now; we might eventually use TLS to implement a
-   thread safe strerror.  */
-#ifdef HAVE_W32CE_SYSTEM
+/* Entry point called by the DLL loader.  */
 int WINAPI
 DllMain (HINSTANCE hinst, DWORD reason, LPVOID reserved)
 {
@@ -418,7 +310,12 @@
       tls = LocalAlloc (LPTR, sizeof *tls);
       if (!tls)
         return FALSE;
+      tls->gt_use_utf8 = 0;
       TlsSetValue (tls_index, tls);
+      if (reason == DLL_PROCESS_ATTACH)
+        {
+          real_init ();
+        }
       break;
 
     case DLL_THREAD_DETACH:
@@ -440,8 +337,8 @@
   
   return TRUE;
 }
-#endif /*HAVE_W32CE_SYSTEM*/
 
+
 #else /*!HAVE_W32_SYSTEM*/
 
 void

Added: trunk/src/init.h
===================================================================
--- trunk/src/init.h	                        (rev 0)
+++ trunk/src/init.h	2010-01-21 12:41:21 UTC (rev 228)
@@ -0,0 +1,65 @@
+/* init.h - Declarations for init.c
+   Copyright (C) 2010 g10 Code GmbH
+
+   This file is part of libgpg-error.
+
+   libgpg-error is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License
+   as published by the Free Software Foundation; either version 2.1 of
+   the License, or (at your option) any later version.
+ 
+   libgpg-error is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+ 
+   You should have received a copy of the GNU Lesser General Public
+   License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef INIT_H
+#define INIT_H
+
+#if HAVE_W32_SYSTEM
+
+/* Forward declaration - defined in w32-gettext.c.  */
+struct loaded_domain;
+
+/* An item for a linked list of loaded domains. */
+struct domainlist_s
+{
+  struct domainlist_s *next;
+  char *dname;                   /* Directory name for the mo file.   */
+  char *fname;                   /* File name for the MO file.  */
+  int load_failed;               /* True if loading the domain failed. */
+  struct loaded_domain *domain;  /* NULL if not loaded.  Never changed
+                                    once set to non-NULL. */
+  char name[1];                  /* Name of the domain.  Never changed
+                                    once set. */
+};
+
+
+
+/* 119 bytes for an error message should be enough.  With this size we
+   can assume that the allocation does not take up more than 128 bytes
+   per thread.  Note that this is only used for W32CE.  */
+#define STRBUFFER_SIZE 120
+
+/* The TLS space definition. */
+struct tls_space_s
+{
+  /* Flag used by w32-gettext.  */
+  int gt_use_utf8;
+  
+#ifdef HAVE_W32CE_SYSTEM
+  char strerror_buffer[STRBUFFER_SIZE];
+#endif
+};
+
+/* Return the TLS.  */
+struct tls_space_s *get_tls (void);
+
+
+#endif /*HAVE_W32_SYSTEM*/
+
+#endif /*INIT_H*/

Modified: trunk/src/mkstrtable.awk
===================================================================
--- trunk/src/mkstrtable.awk	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/mkstrtable.awk	2010-01-21 12:41:21 UTC (rev 228)
@@ -146,9 +146,9 @@
     coded_msgs = msg;
 
   if (nogettext)
-    print "  \"" prefix last_msgstr "\";";
+    print "  \"" last_msgstr "\";";
   else
-    print "  gettext_noop (\"" prefix last_msgstr "\");";
+    print "  gettext_noop (\"" last_msgstr "\");";
   print "";
   print "static const int " namespace "msgidx[] =";
   print "  {";

Added: trunk/src/w32-add.h
===================================================================
--- trunk/src/w32-add.h	                        (rev 0)
+++ trunk/src/w32-add.h	2010-01-21 12:41:21 UTC (rev 228)
@@ -0,0 +1,24 @@
+## w32-add.h - Snippet to be be included into gpg-error.h.
+## (Comments are indicated by a double hash mark)
+
+/* A lean gettext implementation based on GNU style mo files which are
+   required to be encoded in UTF-8.  There is a limit on 65534 entries
+   to save some RAM.  Only Germanic plural rules are supported.  */
+const char *_gpg_w32_bindtextdomain (const char *domainname,
+                                     const char *dirname);
+const char *_gpg_w32_textdomain (const char *domainname);
+const char *_gpg_w32_gettext (const char *msgid);
+const char *_gpg_w32_dgettext (const char *domainname, const char *msgid);
+const char *_gpg_w32_dngettext (const char *domainname, const char *msgid1,
+                                const char *msgid2, unsigned long int n);
+const char *_gpg_w32_gettext_localename (void);
+int _gpg_w32_gettext_use_utf8 (int value);
+
+#define bindtextdomain(a,b) _gpg_w32_bindtextdomain ((a), (b))
+#define textdomain(a)       _gpg_w32_textdomain ((a))
+#define gettext(a)          _gpg_w32_gettext ((a))
+#define dgettext(a,b)       _gpg_w32_dgettext ((a), (b))
+#define ngettext(a,b,c)     _gpg_w32_dngettext (NULL, (a), (b), (c))
+#define dngettext(a,b,c,d)  _gpg_w32_dngettext ((a), (b), (c), (d))
+#define gettext_localname() _gpg_w32_gettext_localename ()
+#define gettext_use_utf8(a) _gpg_w32_gettext_use_utf8 (a)

Modified: trunk/src/w32-gettext.c
===================================================================
--- trunk/src/w32-gettext.c	2010-01-18 20:14:25 UTC (rev 227)
+++ trunk/src/w32-gettext.c	2010-01-21 12:41:21 UTC (rev 228)
@@ -1,6 +1,6 @@
 /* w32-gettext.h - A simple gettext implementation for Windows targets.
-   Copyright (C) 1995,1996,1997,1999,2005 Free Software Foundation, Inc.
-   Copyright (C) 2005 g10 Code GmbH
+   Copyright (C) 1995, 1996, 1997, 1999, 2005, 2007,
+2                 2008, 2010 Free Software Foundation, Inc.
 
    This file is part of libgpg-error.
  
@@ -15,13 +15,15 @@
    Lesser General Public License for more details.
  
    You should have received a copy of the GNU Lesser General Public
-   License along with libgpg-error; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
 
 #if HAVE_CONFIG_H
 #include <config.h>
 #endif
+#if !defined (_WIN32) && !defined (__CYGWIN32__)
+#  error This module may only be build for Windows or Cygwin32
+#endif
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -31,17 +33,28 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdint.h>
+#ifndef HAVE_W32CE_SYSTEM
+# include <locale.h>
+#endif /*HAVE_W32CE_SYSTEM*/
+#include <windows.h>
 
-#include <gpg-error.h>
+#ifdef JNLIB_IN_JNLIB
+#include "libjnlib-config.h"
+#endif
 
-#include "gettext.h"
+#ifndef jnlib_malloc
+# define jnlib_malloc(a)    malloc ((a))
+# define jnlib_calloc(a,b)  calloc ((a), (b))
+# define jnlib_free(a)      free ((a))
+# define jnlib_xstrdup(a)   not_used
+#endif /*!jnlib_malloc*/
 
+#include "init.h"
+
+
 
-/* localname.c from gettext.  */
+/* localname.c from gettext BEGIN.  */
 
-/* Edit: Added a "static" to _nl_locale_name.  Note that the category
-   argument is ignored on w32.  */
-
 /* Determine the current selected locale.
    Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
 
@@ -62,716 +75,543 @@
 
 /* Written by Ulrich Drepper <drepper at gnu.org>, 1995.  */
 /* Win32 code written by Tor Lillqvist <tml at iki.fi>.  */
+/* Renamed _nl_locale_name, removed unsed args, removed include files,
+   non-W32 code and changed comments <wk at gnupg.org>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
+/* Mingw headers don't have latest language and sublanguage codes.  */
+#ifndef LANG_AFRIKAANS
+#define LANG_AFRIKAANS 0x36
 #endif
-
-#include <stdlib.h>
-#ifndef HAVE_W32CE_SYSTEM
-# include <locale.h>
+#ifndef LANG_ALBANIAN
+#define LANG_ALBANIAN 0x1c
 #endif
-
-#ifdef HAVE_W32_SYSTEM
-# include <windows.h>
-/* List of language codes, sorted by value:
-   0x01 LANG_ARABIC
-   0x02 LANG_BULGARIAN
-   0x03 LANG_CATALAN
-   0x04 LANG_CHINESE
-   0x05 LANG_CZECH
-   0x06 LANG_DANISH
-   0x07 LANG_GERMAN
-   0x08 LANG_GREEK
-   0x09 LANG_ENGLISH
-   0x0a LANG_SPANISH
-   0x0b LANG_FINNISH
-   0x0c LANG_FRENCH
-   0x0d LANG_HEBREW
-   0x0e LANG_HUNGARIAN
-   0x0f LANG_ICELANDIC
-   0x10 LANG_ITALIAN
-   0x11 LANG_JAPANESE
-   0x12 LANG_KOREAN
-   0x13 LANG_DUTCH
-   0x14 LANG_NORWEGIAN
-   0x15 LANG_POLISH
-   0x16 LANG_PORTUGUESE
-   0x17 LANG_RHAETO_ROMANCE
-   0x18 LANG_ROMANIAN
-   0x19 LANG_RUSSIAN
-   0x1a LANG_CROATIAN == LANG_SERBIAN
-   0x1b LANG_SLOVAK
-   0x1c LANG_ALBANIAN
-   0x1d LANG_SWEDISH
-   0x1e LANG_THAI
-   0x1f LANG_TURKISH
-   0x20 LANG_URDU
-   0x21 LANG_INDONESIAN
-   0x22 LANG_UKRAINIAN
-   0x23 LANG_BELARUSIAN
-   0x24 LANG_SLOVENIAN
-   0x25 LANG_ESTONIAN
-   0x26 LANG_LATVIAN
-   0x27 LANG_LITHUANIAN
-   0x28 LANG_TAJIK
-   0x29 LANG_FARSI
-   0x2a LANG_VIETNAMESE
-   0x2b LANG_ARMENIAN
-   0x2c LANG_AZERI
-   0x2d LANG_BASQUE
-   0x2e LANG_SORBIAN
-   0x2f LANG_MACEDONIAN
-   0x30 LANG_SUTU
-   0x31 LANG_TSONGA
-   0x32 LANG_TSWANA
-   0x33 LANG_VENDA
-   0x34 LANG_XHOSA
-   0x35 LANG_ZULU
-   0x36 LANG_AFRIKAANS
-   0x37 LANG_GEORGIAN
-   0x38 LANG_FAEROESE
-   0x39 LANG_HINDI
-   0x3a LANG_MALTESE
-   0x3b LANG_SAAMI
-   0x3c LANG_GAELIC
-   0x3d LANG_YIDDISH
-   0x3e LANG_MALAY
-   0x3f LANG_KAZAK
-   0x40 LANG_KYRGYZ
-   0x41 LANG_SWAHILI
-   0x42 LANG_TURKMEN
-   0x43 LANG_UZBEK
-   0x44 LANG_TATAR
-   0x45 LANG_BENGALI
-   0x46 LANG_PUNJABI
-   0x47 LANG_GUJARATI
-   0x48 LANG_ORIYA
-   0x49 LANG_TAMIL
-   0x4a LANG_TELUGU
-   0x4b LANG_KANNADA
-   0x4c LANG_MALAYALAM
-   0x4d LANG_ASSAMESE
-   0x4e LANG_MARATHI
-   0x4f LANG_SANSKRIT
-   0x50 LANG_MONGOLIAN
-   0x51 LANG_TIBETAN
-   0x52 LANG_WELSH
-   0x53 LANG_CAMBODIAN
-   0x54 LANG_LAO
-   0x55 LANG_BURMESE
-   0x56 LANG_GALICIAN
-   0x57 LANG_KONKANI
-   0x58 LANG_MANIPURI
-   0x59 LANG_SINDHI
-   0x5a LANG_SYRIAC
-   0x5b LANG_SINHALESE
-   0x5c LANG_CHEROKEE
-   0x5d LANG_INUKTITUT
-   0x5e LANG_AMHARIC
-   0x5f LANG_TAMAZIGHT
-   0x60 LANG_KASHMIRI
-   0x61 LANG_NEPALI
-   0x62 LANG_FRISIAN
-   0x63 LANG_PASHTO
-   0x64 LANG_TAGALOG
-   0x65 LANG_DIVEHI
-   0x66 LANG_EDO
-   0x67 LANG_FULFULDE
-   0x68 LANG_HAUSA
-   0x69 LANG_IBIBIO
-   0x6a LANG_YORUBA
-   0x70 LANG_IGBO
-   0x71 LANG_KANURI
-   0x72 LANG_OROMO
-   0x73 LANG_TIGRINYA
-   0x74 LANG_GUARANI
-   0x75 LANG_HAWAIIAN
-   0x76 LANG_LATIN
-   0x77 LANG_SOMALI
-   0x78 LANG_YI
-   0x79 LANG_PAPIAMENTU
-*/
-/* Mingw headers don't have latest language and sublanguage codes.  */
-# ifndef LANG_AFRIKAANS
-# define LANG_AFRIKAANS 0x36
-# endif
-# ifndef LANG_ALBANIAN
-# define LANG_ALBANIAN 0x1c
-# endif
-# ifndef LANG_AMHARIC
-# define LANG_AMHARIC 0x5e
-# endif
-# ifndef LANG_ARABIC
-# define LANG_ARABIC 0x01
-# endif
-# ifndef LANG_ARMENIAN
-# define LANG_ARMENIAN 0x2b
-# endif
-# ifndef LANG_ASSAMESE
-# define LANG_ASSAMESE 0x4d
-# endif
-# ifndef LANG_AZERI
-# define LANG_AZERI 0x2c
-# endif
-# ifndef LANG_BASQUE
-# define LANG_BASQUE 0x2d
-# endif
-# ifndef LANG_BELARUSIAN
-# define LANG_BELARUSIAN 0x23
-# endif
-# ifndef LANG_BENGALI
-# define LANG_BENGALI 0x45
-# endif
-# ifndef LANG_BURMESE
-# define LANG_BURMESE 0x55
-# endif
-# ifndef LANG_CAMBODIAN
-# define LANG_CAMBODIAN 0x53
-# endif
-# ifndef LANG_CATALAN
-# define LANG_CATALAN 0x03
-# endif
-# ifndef LANG_CHEROKEE
-# define LANG_CHEROKEE 0x5c
-# endif
-# ifndef LANG_DIVEHI
-# define LANG_DIVEHI 0x65
-# endif
-# ifndef LANG_EDO
-# define LANG_EDO 0x66
-# endif
-# ifndef LANG_ESTONIAN
-# define LANG_ESTONIAN 0x25
-# endif
-# ifndef LANG_FAEROESE
-# define LANG_FAEROESE 0x38
-# endif
-# ifndef LANG_FARSI
-# define LANG_FARSI 0x29
-# endif
-# ifndef LANG_FRISIAN
-# define LANG_FRISIAN 0x62
-# endif
-# ifndef LANG_FULFULDE
-# define LANG_FULFULDE 0x67
-# endif
-# ifndef LANG_GAELIC
-# define LANG_GAELIC 0x3c
-# endif
-# ifndef LANG_GALICIAN
-# define LANG_GALICIAN 0x56
-# endif
-# ifndef LANG_GEORGIAN
-# define LANG_GEORGIAN 0x37
-# endif
-# ifndef LANG_GUARANI
-# define LANG_GUARANI 0x74
-# endif
-# ifndef LANG_GUJARATI
-# define LANG_GUJARATI 0x47
-# endif
-# ifndef LANG_HAUSA
-# define LANG_HAUSA 0x68
-# endif
-# ifndef LANG_HAWAIIAN
-# define LANG_HAWAIIAN 0x75
-# endif
-# ifndef LANG_HEBREW
-# define LANG_HEBREW 0x0d
-# endif
-# ifndef LANG_HINDI
-# define LANG_HINDI 0x39
-# endif
-# ifndef LANG_IBIBIO
-# define LANG_IBIBIO 0x69
-# endif
-# ifndef LANG_IGBO
-# define LANG_IGBO 0x70
-# endif
-# ifndef LANG_INDONESIAN
-# define LANG_INDONESIAN 0x21
-# endif
-# ifndef LANG_INUKTITUT
-# define LANG_INUKTITUT 0x5d
-# endif
-# ifndef LANG_KANNADA
-# define LANG_KANNADA 0x4b
-# endif
-# ifndef LANG_KANURI
-# define LANG_KANURI 0x71
-# endif
-# ifndef LANG_KASHMIRI
-# define LANG_KASHMIRI 0x60
-# endif
-# ifndef LANG_KAZAK
-# define LANG_KAZAK 0x3f
-# endif
-# ifndef LANG_KONKANI
-# define LANG_KONKANI 0x57
-# endif
-# ifndef LANG_KYRGYZ
-# define LANG_KYRGYZ 0x40
-# endif
-# ifndef LANG_LAO
-# define LANG_LAO 0x54
-# endif
-# ifndef LANG_LATIN
-# define LANG_LATIN 0x76
-# endif
-# ifndef LANG_LATVIAN
-# define LANG_LATVIAN 0x26
-# endif
-# ifndef LANG_LITHUANIAN
-# define LANG_LITHUANIAN 0x27
-# endif
-# ifndef LANG_MACEDONIAN
-# define LANG_MACEDONIAN 0x2f
-# endif
-# ifndef LANG_MALAY
-# define LANG_MALAY 0x3e
-# endif
-# ifndef LANG_MALAYALAM
-# define LANG_MALAYALAM 0x4c
-# endif
-# ifndef LANG_MALTESE
-# define LANG_MALTESE 0x3a
-# endif
-# ifndef LANG_MANIPURI
-# define LANG_MANIPURI 0x58
-# endif
-# ifndef LANG_MARATHI
-# define LANG_MARATHI 0x4e
-# endif
-# ifndef LANG_MONGOLIAN
-# define LANG_MONGOLIAN 0x50
-# endif
-# ifndef LANG_NEPALI
-# define LANG_NEPALI 0x61
-# endif
-# ifndef LANG_ORIYA
-# define LANG_ORIYA 0x48
-# endif
-# ifndef LANG_OROMO
-# define LANG_OROMO 0x72
-# endif
-# ifndef LANG_PAPIAMENTU
-# define LANG_PAPIAMENTU 0x79
-# endif
-# ifndef LANG_PASHTO
-# define LANG_PASHTO 0x63
-# endif
-# ifndef LANG_PUNJABI
-# define LANG_PUNJABI 0x46
-# endif
-# ifndef LANG_RHAETO_ROMANCE
-# define LANG_RHAETO_ROMANCE 0x17
-# endif
-# ifndef LANG_SAAMI
-# define LANG_SAAMI 0x3b
-# endif
-# ifndef LANG_SANSKRIT
-# define LANG_SANSKRIT 0x4f
-# endif
-# ifndef LANG_SERBIAN
-# define LANG_SERBIAN 0x1a
-# endif
-# ifndef LANG_SINDHI
-# define LANG_SINDHI 0x59
-# endif
-# ifndef LANG_SINHALESE
-# define LANG_SINHALESE 0x5b
-# endif
-# ifndef LANG_SLOVAK
-# define LANG_SLOVAK 0x1b
-# endif
-# ifndef LANG_SOMALI
-# define LANG_SOMALI 0x77
-# endif
-# ifndef LANG_SORBIAN
-# define LANG_SORBIAN 0x2e
-# endif
-# ifndef LANG_SUTU
-# define LANG_SUTU 0x30
-# endif
-# ifndef LANG_SWAHILI
-# define LANG_SWAHILI 0x41
-# endif
-# ifndef LANG_SYRIAC
-# define LANG_SYRIAC 0x5a
-# endif
-# ifndef LANG_TAGALOG
-# define LANG_TAGALOG 0x64
-# endif
-# ifndef LANG_TAJIK
-# define LANG_TAJIK 0x28
-# endif
-# ifndef LANG_TAMAZIGHT
-# define LANG_TAMAZIGHT 0x5f
-# endif
-# ifndef LANG_TAMIL
-# define LANG_TAMIL 0x49
-# endif
-# ifndef LANG_TATAR
-# define LANG_TATAR 0x44
-# endif
-# ifndef LANG_TELUGU
-# define LANG_TELUGU 0x4a
-# endif
-# ifndef LANG_THAI
-# define LANG_THAI 0x1e
-# endif
-# ifndef LANG_TIBETAN
-# define LANG_TIBETAN 0x51
-# endif
-# ifndef LANG_TIGRINYA
-# define LANG_TIGRINYA 0x73
-# endif
-# ifndef LANG_TSONGA
-# define LANG_TSONGA 0x31
-# endif
-# ifndef LANG_TSWANA
-# define LANG_TSWANA 0x32
-# endif
-# ifndef LANG_TURKMEN
-# define LANG_TURKMEN 0x42
-# endif
-# ifndef LANG_UKRAINIAN
-# define LANG_UKRAINIAN 0x22
-# endif
-# ifndef LANG_URDU
-# define LANG_URDU 0x20
-# endif
-# ifndef LANG_UZBEK
-# define LANG_UZBEK 0x43
-# endif
-# ifndef LANG_VENDA
-# define LANG_VENDA 0x33
-# endif
-# ifndef LANG_VIETNAMESE
-# define LANG_VIETNAMESE 0x2a
-# endif
-# ifndef LANG_WELSH
-# define LANG_WELSH 0x52
-# endif
-# ifndef LANG_XHOSA
-# define LANG_XHOSA 0x34
-# endif
-# ifndef LANG_YI
-# define LANG_YI 0x78
-# endif
-# ifndef LANG_YIDDISH
-# define LANG_YIDDISH 0x3d
-# endif
-# ifndef LANG_YORUBA
-# define LANG_YORUBA 0x6a
-# endif
-# ifndef LANG_ZULU
-# define LANG_ZULU 0x35
-# endif
-# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
-# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
-# endif
-# ifndef SUBLANG_ARABIC_IRAQ
-# define SUBLANG_ARABIC_IRAQ 0x02
-# endif
-# ifndef SUBLANG_ARABIC_EGYPT
-# define SUBLANG_ARABIC_EGYPT 0x03
-# endif
-# ifndef SUBLANG_ARABIC_LIBYA
-# define SUBLANG_ARABIC_LIBYA 0x04
-# endif
-# ifndef SUBLANG_ARABIC_ALGERIA
-# define SUBLANG_ARABIC_ALGERIA 0x05
-# endif
-# ifndef SUBLANG_ARABIC_MOROCCO
-# define SUBLANG_ARABIC_MOROCCO 0x06
-# endif
-# ifndef SUBLANG_ARABIC_TUNISIA
-# define SUBLANG_ARABIC_TUNISIA 0x07
-# endif
-# ifndef SUBLANG_ARABIC_OMAN
-# define SUBLANG_ARABIC_OMAN 0x08
-# endif
-# ifndef SUBLANG_ARABIC_YEMEN
-# define SUBLANG_ARABIC_YEMEN 0x09
-# endif
-# ifndef SUBLANG_ARABIC_SYRIA
-# define SUBLANG_ARABIC_SYRIA 0x0a
-# endif
-# ifndef SUBLANG_ARABIC_JORDAN
-# define SUBLANG_ARABIC_JORDAN 0x0b
-# endif
-# ifndef SUBLANG_ARABIC_LEBANON
-# define SUBLANG_ARABIC_LEBANON 0x0c
-# endif
-# ifndef SUBLANG_ARABIC_KUWAIT
-# define SUBLANG_ARABIC_KUWAIT 0x0d
-# endif
-# ifndef SUBLANG_ARABIC_UAE
-# define SUBLANG_ARABIC_UAE 0x0e
-# endif
-# ifndef SUBLANG_ARABIC_BAHRAIN
-# define SUBLANG_ARABIC_BAHRAIN 0x0f
-# endif
-# ifndef SUBLANG_ARABIC_QATAR
-# define SUBLANG_ARABIC_QATAR 0x10
-# endif
-# ifndef SUBLANG_AZERI_LATIN
-# define SUBLANG_AZERI_LATIN 0x01
-# endif
-# ifndef SUBLANG_AZERI_CYRILLIC
-# define SUBLANG_AZERI_CYRILLIC 0x02
-# endif
-# ifndef SUBLANG_BENGALI_INDIA
-# define SUBLANG_BENGALI_INDIA 0x01
-# endif
-# ifndef SUBLANG_BENGALI_BANGLADESH
-# define SUBLANG_BENGALI_BANGLADESH 0x02
-# endif
-# ifndef SUBLANG_CHINESE_MACAU
-# define SUBLANG_CHINESE_MACAU 0x05
-# endif
-# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
-# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
-# endif
-# ifndef SUBLANG_ENGLISH_JAMAICA
-# define SUBLANG_ENGLISH_JAMAICA 0x08
-# endif
-# ifndef SUBLANG_ENGLISH_CARIBBEAN
-# define SUBLANG_ENGLISH_CARIBBEAN 0x09
-# endif
-# ifndef SUBLANG_ENGLISH_BELIZE
-# define SUBLANG_ENGLISH_BELIZE 0x0a
-# endif
-# ifndef SUBLANG_ENGLISH_TRINIDAD
-# define SUBLANG_ENGLISH_TRINIDAD 0x0b
-# endif
-# ifndef SUBLANG_ENGLISH_ZIMBABWE
-# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
-# endif
-# ifndef SUBLANG_ENGLISH_PHILIPPINES
-# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
-# endif
-# ifndef SUBLANG_ENGLISH_INDONESIA
-# define SUBLANG_ENGLISH_INDONESIA 0x0e
-# endif
-# ifndef SUBLANG_ENGLISH_HONGKONG
-# define SUBLANG_ENGLISH_HONGKONG 0x0f
-# endif
-# ifndef SUBLANG_ENGLISH_INDIA
-# define SUBLANG_ENGLISH_INDIA 0x10
-# endif
-# ifndef SUBLANG_ENGLISH_MALAYSIA
-# define SUBLANG_ENGLISH_MALAYSIA 0x11
-# endif
-# ifndef SUBLANG_ENGLISH_SINGAPORE
-# define SUBLANG_ENGLISH_SINGAPORE 0x12
-# endif
-# ifndef SUBLANG_FRENCH_LUXEMBOURG
-# define SUBLANG_FRENCH_LUXEMBOURG 0x05
-# endif
-# ifndef SUBLANG_FRENCH_MONACO
-# define SUBLANG_FRENCH_MONACO 0x06
-# endif
-# ifndef SUBLANG_FRENCH_WESTINDIES
-# define SUBLANG_FRENCH_WESTINDIES 0x07
-# endif
-# ifndef SUBLANG_FRENCH_REUNION
-# define SUBLANG_FRENCH_REUNION 0x08
-# endif
-# ifndef SUBLANG_FRENCH_CONGO
-# define SUBLANG_FRENCH_CONGO 0x09
-# endif
-# ifndef SUBLANG_FRENCH_SENEGAL
-# define SUBLANG_FRENCH_SENEGAL 0x0a
-# endif
-# ifndef SUBLANG_FRENCH_CAMEROON
-# define SUBLANG_FRENCH_CAMEROON 0x0b
-# endif
-# ifndef SUBLANG_FRENCH_COTEDIVOIRE
-# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
-# endif
-# ifndef SUBLANG_FRENCH_MALI
-# define SUBLANG_FRENCH_MALI 0x0d




More information about the Gnupg-commits mailing list