static int mbfl_filt_ident_utf16(int c, mbfl_identify_filter *filter);
static int mbfl_filt_ident_utf16le(int c, mbfl_identify_filter *filter);
static int mbfl_filt_ident_utf16be(int c, mbfl_identify_filter *filter);
+static int mbfl_filt_conv_utf16_wchar_flush(mbfl_convert_filter *filter);
static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL};
mbfl_filt_conv_common_ctor,
NULL,
mbfl_filt_conv_utf16_wchar,
- mbfl_filt_conv_common_flush,
+ mbfl_filt_conv_utf16_wchar_flush,
NULL,
};
mbfl_filt_conv_common_ctor,
NULL,
mbfl_filt_conv_utf16be_wchar,
- mbfl_filt_conv_common_flush,
+ mbfl_filt_conv_utf16_wchar_flush,
NULL,
};
mbfl_filt_conv_common_ctor,
NULL,
mbfl_filt_conv_utf16le_wchar,
- mbfl_filt_conv_common_flush,
+ mbfl_filt_conv_utf16_wchar_flush,
NULL,
};
return c;
}
+static int mbfl_filt_conv_utf16_wchar_flush(mbfl_convert_filter *filter)
+{
+ int status = filter->status;
+ int cache = filter->cache;
+ filter->status = filter->cache = 0;
+
+ if (status & 0xF) {
+ /* Input string was truncated */
+ CK((*filter->output_function)(cache | MBFL_WCSGROUP_THROUGH, filter->data));
+ }
+
+ if (filter->flush_function) {
+ (*filter->flush_function)(filter->data);
+ }
+
+ return 0;
+}
+
static int mbfl_filt_ident_utf16(int c, mbfl_identify_filter *filter)
{
if (filter->status == 0) {