Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
lang.c
Log Message:
Fix potential crash if iconv_open fails.
Issue warnings for unavailable encoding conversions.
===================================================================
RCS file: /cvs/e/e16/e/src/lang.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- lang.c 10 May 2008 23:22:31 -0000 1.25
+++ lang.c 26 Jun 2008 21:57:22 -0000 1.26
@@ -60,11 +60,8 @@
pi = (char *)txt;
po = buf;
ni = (len > 0) ? len : strlen(txt);
- if (!icd)
- {
- Eprintf("*** WARNING - Missing conversion\n");
- return Estrndup(txt, ni);
- }
+ if (icd == BAD_CD)
+ return Estrndup(txt, ni);
no = sizeof(buf);
err = iconv(icd, &pi, &ni, &po, &no);
@@ -73,6 +70,18 @@
return po;
}
+static iconv_t
+EiconvOpen(const char *to, const char *from)
+{
+ iconv_t icd;
+
+ icd = iconv_open(to, from);
+ if (icd == BAD_CD)
+ Eprintf("*** WARNING - Missing conversion %s->%s\n", from, to);
+
+ return icd;
+}
+
#endif
#if 0 /* Unused */
@@ -167,11 +176,11 @@
enc = nl_langinfo(CODESET);
#if SIZEOF_WCHAR_T == 4
- iconv_cd_str2wcs = iconv_open("UCS-4", enc);
- iconv_cd_wcs2str = iconv_open(enc, "UCS-4");
+ iconv_cd_str2wcs = EiconvOpen("UCS-4", enc);
+ iconv_cd_wcs2str = EiconvOpen(enc, "UCS-4");
#else
- iconv_cd_str2wcs = iconv_open("WCHAR_T", enc);
- iconv_cd_wcs2str = iconv_open(enc, "WCHAR_T");
+ iconv_cd_str2wcs = EiconvOpen("WCHAR_T", enc);
+ iconv_cd_wcs2str = EiconvOpen(enc, "WCHAR_T");
#endif
if (iconv_cd_str2wcs != BAD_CD && iconv_cd_wcs2str != BAD_CD)
@@ -385,15 +394,15 @@
#if HAVE_ICONV
if (Mode.locale.utf8_int)
{
- iconv_cd_loc2int = iconv_open("UTF-8", enc_loc);
- iconv_cd_int2loc = iconv_open(enc_loc, "UTF-8");
+ iconv_cd_loc2int = EiconvOpen("UTF-8", enc_loc);
+ iconv_cd_int2loc = EiconvOpen(enc_loc, "UTF-8");
iconv_cd_utf82int = iconv_cd_int2utf8 = BAD_CD;
}
else
{
iconv_cd_loc2int = iconv_cd_int2loc = BAD_CD;
- iconv_cd_utf82int = iconv_open(enc_loc, "UTF-8");
- iconv_cd_int2utf8 = iconv_open("UTF-8", enc_loc);
+ iconv_cd_utf82int = EiconvOpen(enc_loc, "UTF-8");
+ iconv_cd_int2utf8 = EiconvOpen("UTF-8", enc_loc);
}
#endif
}
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs