diff options
| -rw-r--r-- | gtk/Converter.h | 28 | 
1 files changed, 23 insertions, 5 deletions
| diff --git a/gtk/Converter.h b/gtk/Converter.h index c408c220f..09f213a66 100644 --- a/gtk/Converter.h +++ b/gtk/Converter.h @@ -4,12 +4,17 @@  // The License.txt file describes the conditions under which this software may be distributed.  #include <iconv.h> -const iconv_t iconvhBad = (iconv_t)(-1); +#if GTK_MAJOR_VERSION >= 2 +	typedef GIConv ConverterHandle; +#else +	typedef iconv_t ConverterHandle; +#endif +const ConverterHandle iconvhBad = (ConverterHandle)(-1);  // Since various versions of iconv can not agree on whether the src argument  // is char ** or const char ** provide a templatised adaptor.  template<typename T> -size_t iconv_adaptor(size_t(*f_iconv)(iconv_t, T, size_t *, char **, size_t *), -		iconv_t cd, char** src, size_t *srcleft, +size_t iconv_adaptor(size_t(*f_iconv)(ConverterHandle, T, size_t *, char **, size_t *), +		ConverterHandle cd, char** src, size_t *srcleft,  		char **dst, size_t *dstleft) {  	return f_iconv(cd, (T)src, srcleft, dst, dstleft);  } @@ -17,13 +22,14 @@ size_t iconv_adaptor(size_t(*f_iconv)(iconv_t, T, size_t *, char **, size_t *),   * Encapsulate iconv safely and avoid iconv_adaptor complexity in client code.   */  class Converter { -	iconv_t iconvh; +	ConverterHandle iconvh;  public:  	Converter() {  		iconvh = iconvhBad;  	}  	Converter(const char *charSetDestination, const char *charSetSource) { -		iconvh = iconv_open(charSetDestination, charSetSource); +		iconvh = iconvhBad; +	    	Open(charSetDestination, charSetSource);  	}  	~Converter() {  		Close(); @@ -34,12 +40,20 @@ public:  	void Open(const char *charSetDestination, const char *charSetSource) {  		Close();  		if (*charSetSource) { +#if GTK_MAJOR_VERSION >= 2 +			iconvh = g_iconv_open(charSetDestination, charSetSource); +#else  			iconvh = iconv_open(charSetDestination, charSetSource); +#endif  		}  	}  	void Close() {  		if (iconvh != iconvhBad) { +#if GTK_MAJOR_VERSION >= 2 +			g_iconv_close(iconvh); +#else  			iconv_close(iconvh); +#endif  			iconvh = iconvhBad;  		}  	} @@ -47,7 +61,11 @@ public:  		if (iconvh == iconvhBad) {  			return (size_t)(-1);  		} else { +#if GTK_MAJOR_VERSION >= 2 +			return iconv_adaptor(g_iconv, iconvh, src, srcleft, dst, dstleft); +#else  			return iconv_adaptor(iconv, iconvh, src, srcleft, dst, dstleft); +#endif  		}  	}  }; | 
