i18n: New function recode_byte().
[pspp-builds.git] / src / libpspp / i18n.c
index 4934617121c786f5b19c6db88cc20e6f2033f116..cb155723b3e8bc9867c848bc12a9ab8c85fb42c3 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -85,6 +85,20 @@ create_iconv (const char* tocode, const char* fromcode)
   return converter->conv;
 }
 
+/* Converts the single byte C from encoding FROM to TO, returning the first
+   byte of the result.
+
+   This function probably shouldn't be used at all, but some code still does
+   use it. */
+char
+recode_byte (const char *to, const char *from, char c)
+{
+  char x;
+  char *s = recode_string (to, from, &c, 1);
+  x = s[0];
+  free (s);
+  return x;
+}
 
 /* Similar to recode_string_pool, but allocates the returned value on the heap
    instead of in a pool.  It is the caller's responsibility to free the
@@ -208,7 +222,7 @@ recode_substring_pool (const char *to, const char *from,
   if ( (iconv_t) -1 == conv )
     {
       struct substring out;
-      ss_alloc_substring (&out, text);
+      ss_alloc_substring_pool (&out, text, pool);
       return out;
     }
 
@@ -229,17 +243,13 @@ recode_substring_pool (const char *to, const char *from,
 void
 i18n_init (void)
 {
-#if ENABLE_NLS
   setlocale (LC_CTYPE, "");
-#ifdef LC_MESSAGES
   setlocale (LC_MESSAGES, "");
-#endif
 #if HAVE_LC_PAPER
   setlocale (LC_PAPER, "");
 #endif
   bindtextdomain (PACKAGE, relocate(locale_dir));
   textdomain (PACKAGE);
-#endif /* ENABLE_NLS */
 
   assert (default_encoding == NULL);
   default_encoding = xstrdup (locale_charset ());