2007-11-27 Tor Lillqvist <tml@novell.com>
+ * glib/win_iconv.c: Some improvements, being upstreamed.
+ (must_use_null_useddefaultchar): New function, checks for those
+ codepages for which one must pass a NULL lpUsedDefaultChar pointer
+ to WideCharToMultiByte().
+ (kernel_wctomb): Use it.
+ (kernel_wctomb): Return with E2BIG immediately if bufsize is zero.
+
+2007-11-27 Tor Lillqvist <tml@novell.com>
+
* glib/gutils.c (_glib_get_locale_dir) [Win32]: Use either
lib/locale or share/locale depending on which one is in
GLIB_LOCALE_DIR. When the configury recognizes GNU gettext (based
static uint utf16_to_ucs4(const ushort *wbuf);\r
static void ucs4_to_utf16(uint wc, ushort *wbuf, int *wbufsize);\r
static int is_unicode(int codepage);\r
+static int must_use_null_useddefaultchar(int codepage);\r
static void check_utf_bom(rec_iconv_t *cd, ushort *wbuf, int *wbufsize);\r
static char *strrstr(const char *str, const char *token);\r
\r
codepage == 65000 || codepage == 65001);\r
}\r
\r
+static int\r
+must_use_null_useddefaultchar(int codepage)\r
+{\r
+ return (codepage == 65000 || codepage == 65001 ||\r
+ codepage == 50220 || codepage == 50221 ||\r
+ codepage == 50222 || codepage == 50225 ||\r
+ codepage == 50227 || codepage == 50229 ||\r
+ codepage == 52936 || codepage == 54936 ||\r
+ (codepage >= 57002 && codepage <= 57011) ||\r
+ codepage == 42);\r
+}\r
+\r
static void\r
check_utf_bom(rec_iconv_t *cd, ushort *wbuf, int *wbufsize)\r
{\r
BOOL usedDefaultChar = 0;\r
int len;\r
\r
+ if (bufsize == 0)\r
+ return_error(E2BIG);\r
len = WideCharToMultiByte(cv->codepage, 0,\r
(const wchar_t *)wbuf, wbufsize, (char *)buf, bufsize, NULL,\r
- (cv->codepage == 65000 || cv->codepage == 65001) ? NULL : &usedDefaultChar);\r
+ must_use_null_useddefaultchar(cv->codepage) ? NULL : &usedDefaultChar);\r
if (len == 0)\r
{\r
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)\r