diff options
author | Werner Koch <wk@gnupg.org> | 2012-11-12 15:38:51 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2012-12-13 16:11:21 +0100 |
commit | 6177fb3c87f485fb654bbba492d04508755718b3 (patch) | |
tree | 9fba7282c1f83a2c324873b5a1f6e94cbaf9929a | |
parent | SCD: Fix the process of writing key or generating key. (diff) | |
download | gnupg2-6177fb3c87f485fb654bbba492d04508755718b3.tar.xz gnupg2-6177fb3c87f485fb654bbba492d04508755718b3.zip |
utf8conv.c: Add hacks for Android.
* common/utf8conv.c [HAVE_ANDROID_SYSTEM]: Do not include iconv.h.
(iconv_open, iconv_close, load_libiconv) [HAVE_ANDROID_SYSTEM]: New
dummy functions.
(set_native_charset) [HAVE_ANDROID_SYSTEM]: Force use of "utf-8".
(jnlib_iconv_open) [HAVE_ANDROID_SYSTEM]: Act the same as under W32.
(jnlib_iconv) [HAVE_ANDROID_SYSTEM]: Ditto.
(jnlib_iconv_close) [HAVE_ANDROID_SYSTEM]: Ditto.
--
Co-authored-by: Hans of Guardian <hans@guardianproject.info>
-rw-r--r-- | common/utf8conv.c | 69 |
1 files changed, 55 insertions, 14 deletions
diff --git a/common/utf8conv.c b/common/utf8conv.c index 1d649332b..a45bb6327 100644 --- a/common/utf8conv.c +++ b/common/utf8conv.c @@ -38,7 +38,7 @@ #include <langinfo.h> #endif #include <errno.h> -#ifndef HAVE_W32_SYSTEM +#if !defined HAVE_W32_SYSTEM && !defined HAVE_ANDROID_SYSTEM # include <iconv.h> #endif @@ -56,9 +56,48 @@ static int no_translation; /* Set to true if we let simply pass through. */ static int use_iconv; /* iconv comversion fucntions required. */ +#ifdef HAVE_ANDROID_SYSTEM +/* Fake stuff to get things building. */ +typedef void *iconv_t; +#define ICONV_CONST + +static iconv_t +iconv_open (const char *tocode, const char *fromcode) +{ + (void)tocode; + (void)fromcode; + return (iconv_t)(-1); +} + +static size_t +iconv (iconv_t cd, char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft) +{ + (void)cd; + (void)inbuf; + (void)inbytesleft; + (void)outbuf; + (void)outbytesleft; + return (size_t)(0); +} + +static int +iconv_close (iconv_t cd) +{ + (void)cd; + return 0; +} + + +static int +load_libiconv (void) +{ + return -1; +} + +#elif defined HAVE_W32_SYSTEM /* Under W32 we dlopen the iconv dll and don't require any iconv related headers at all. However we need to define some stuff. */ -#ifdef HAVE_W32_SYSTEM typedef void *iconv_t; #ifndef ICONV_CONST #define ICONV_CONST @@ -170,7 +209,9 @@ set_native_charset (const char *newset) if (!newset) { -#ifdef HAVE_W32_SYSTEM +#ifdef HAVE_ANDROID_SYSTEM + newset = "utf-8"; +#elif defined HAVE_W32_SYSTEM static char codepage[30]; unsigned int cpno; const char *aliases; @@ -218,7 +259,7 @@ set_native_charset (const char *newset) } } -#else /*!HAVE_W32_SYSTEM*/ +#else /*!HAVE_W32_SYSTEM && !HAVE_ANDROID_SYSTEM*/ #ifdef HAVE_LANGINFO_CODESET newset = nl_langinfo (CODESET); @@ -252,7 +293,7 @@ set_native_charset (const char *newset) } newset = codepage; #endif /*!HAVE_LANGINFO_CODESET*/ -#endif /*!HAVE_W32_SYSTEM*/ +#endif /*!HAVE_W32_SYSTEM && !HAVE_ANDROID_SYSTEM*/ } full_newset = newset; @@ -291,10 +332,10 @@ set_native_charset (const char *newset) { iconv_t cd; -#ifdef HAVE_W32_SYSTEM +#if defined HAVE_W32_SYSTEM || defined HAVE_ANDROID_SYSTEM if (load_libiconv ()) return -1; -#endif /*HAVE_W32_SYSTEM*/ +#endif /*HAVE_W32_SYSTEM || HAVE_ANDROID_SYSTEM*/ cd = iconv_open (full_newset, "utf-8"); if (cd == (iconv_t)-1) @@ -717,10 +758,10 @@ utf8_to_native (const char *string, size_t length, int delim) jnlib_iconv_t jnlib_iconv_open (const char *tocode, const char *fromcode) { -#ifdef HAVE_W32_SYSTEM +#if defined HAVE_W32_SYSTEM || defined HAVE_ANDROID_SYSTEM if (load_libiconv ()) return (jnlib_iconv_t)(-1); -#endif /*HAVE_W32_SYSTEM*/ +#endif /*HAVE_W32_SYSTEM || HAVE_ANDROID_SYSTEM*/ return (jnlib_iconv_t)iconv_open (tocode, fromcode); } @@ -734,10 +775,10 @@ jnlib_iconv (jnlib_iconv_t cd, char **outbuf, size_t *outbytesleft) { -#ifdef HAVE_W32_SYSTEM +#if defined HAVE_W32_SYSTEM || defined HAVE_ANDROID_SYSTEM if (load_libiconv ()) return 0; -#endif /*HAVE_W32_SYSTEM*/ +#endif /*HAVE_W32_SYSTEM || HAVE_ANDROID_SYSTEM*/ return iconv ((iconv_t)cd, (char**)inbuf, inbytesleft, outbuf, outbytesleft); } @@ -747,10 +788,10 @@ jnlib_iconv (jnlib_iconv_t cd, int jnlib_iconv_close (jnlib_iconv_t cd) { -#ifdef HAVE_W32_SYSTEM +#if defined HAVE_W32_SYSTEM || defined HAVE_ANDROID_SYSTEM if (load_libiconv ()) return 0; -#endif /*HAVE_W32_SYSTEM*/ +#endif /*HAVE_W32_SYSTEM || HAVE_ANDROID_SYSTEM*/ return iconv_close ((iconv_t)cd); } @@ -826,4 +867,4 @@ utf8_to_wchar (const char *string) } return result; } -#endif /*HAVE_W32_SYSTEM*/ +#endif /*HAVE_W32_SYSTEM || HAVE_ANDROID_SYSTEM*/ |