Use SDL_iconv functions for better portability
authorTim Goya <tuxdev103@gmail.com>
Fri, 9 Nov 2007 22:09:09 +0000 (22:09 +0000)
committerTim Goya <tuxdev103@gmail.com>
Fri, 9 Nov 2007 22:09:09 +0000 (22:09 +0000)
SVN-Revision: 5182

src/tinygettext/tinygettext.cpp

index 3da855a..d22ae2a 100644 (file)
 #include <config.h>
 
 #include <sys/types.h>
-#include <iconv.h>
 #include <fstream>
 #include <iostream>
 #include <algorithm>
 #include <ctype.h>
 #include <errno.h>
 
+#include "SDL.h"
+
 #include "tinygettext.hpp"
 #include "log.hpp"
 #include "physfs/physfs_stream.hpp"
@@ -45,7 +46,20 @@ std::string convert(const std::string& text,
   if (from_charset == to_charset)
     return text;
 
-  iconv_t cd = iconv_open(to_charset.c_str(), from_charset.c_str());
+  char *in = new char[text.length() + 1];
+  strcpy(in, text.c_str());
+  char *out = SDL_iconv_string(to_charset.c_str(), from_charset.c_str(), in, text.length() + 1);
+  delete[] in; 
+  if(out == 0)
+  {
+    log_warning << "Error: conversion from " << from_charset << " to " << to_charset << " failed" << std::endl;
+    return "";
+  }
+  std::string ret(out);
+  SDL_free(out);
+  return ret;
+#if 0
+  iconv_t cd = SDL_iconv_open(to_charset.c_str(), from_charset.c_str());
 
   size_t in_len = text.length();
   size_t out_len = text.length()*3; // FIXME: cross fingers that this is enough
@@ -59,7 +73,7 @@ std::string convert(const std::string& text,
   size_t out_len_temp = out_len; // iconv is counting down the bytes it has
                                  // written from this...
 
-  size_t retval = iconv(cd, &in, &in_len, &out, &out_len_temp);
+  size_t retval = SDL_iconv(cd, &in, &in_len, &out, &out_len_temp);
   out_len -= out_len_temp; // see above
   if (retval == (size_t) -1)
     {
@@ -67,12 +81,13 @@ std::string convert(const std::string& text,
       log_warning << "Error: conversion from " << from_charset << " to " << to_charset << " went wrong: " << retval << std::endl;
       return "";
     }
-  iconv_close(cd);
+  SDL_iconv_close(cd);
 
   std::string ret(out_orig, out_len);
   delete[] out_orig;
   delete[] in_orig;
   return ret;
+#endif
 }
 
 bool has_suffix(const std::string& lhs, const std::string rhs)