2009-12-17 Jerker Back <jerker.back@gmail.com>

* libc/iconv/lib/local.h[!__GNUC__]: Add alternative version of
        ICONV_ZERO_MB_STATE_T macro.
        * libc/iconv/lib/ucsconv.c (ucs_based_conversion_get_state): Use
        temporary local variable nullstate to hold empty mbstate_t.
This commit is contained in:
Jeff Johnston 2009-12-17 20:04:43 +00:00
parent 8b917fbcdd
commit bbe9636fd8
3 changed files with 14 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2009-12-17 Jerker Back <jerker.back@gmail.com>
* libc/iconv/lib/local.h[!__GNUC__]: Add alternative version of
ICONV_ZERO_MB_STATE_T macro.
* libc/iconv/lib/ucsconv.c (ucs_based_conversion_get_state): Use
temporary local variable nullstate to hold empty mbstate_t.
2009-12-17 Jerker Back <jerker.back@gmail.com>
* libc/include/_ansi.h: Add new _EXFNPTR macro for using with

View File

@ -41,7 +41,11 @@
#define ICONV_DATA_EXT ".cct"
/* This macro is used to zero mbstate_t objects */
#ifdef __GNUC__
#define ICONV_ZERO_MB_STATE_T ((mbstate_t){0, {0}})
#else
#define ICONV_ZERO_MB_STATE_T {0}
#endif
/* Define the maximum multi-byte character length produced by iconv library */
#if MB_LEN_MAX < 6

View File

@ -258,20 +258,21 @@ _DEFUN(ucs_based_conversion_get_state, (data, state, direction),
int direction)
{
iconv_ucs_conversion_t *uc = (iconv_ucs_conversion_t *)data;
mbstate_t nullstate = ICONV_ZERO_MB_STATE_T;
if (direction == 0)
{
if (uc->to_ucs.handlers->get_state != NULL)
uc->to_ucs.handlers->get_state (uc->to_ucs.data, state);
else
*state = ICONV_ZERO_MB_STATE_T;
*state = nullstate; /* internal copy */
}
else
{
if (uc->from_ucs.handlers->get_state != NULL)
uc->from_ucs.handlers->get_state (uc->from_ucs.data, state);
else
*state = ICONV_ZERO_MB_STATE_T;
*state = nullstate; /* internal copy */
}
return;