|
|
|
@ -36,6 +36,11 @@ |
|
|
|
|
|
|
|
#include "mbfilter.h" |
|
|
|
|
|
|
|
const struct mbfl_convert_vtbl vtbl_8bit_wchar; |
|
|
|
const struct mbfl_convert_vtbl vtbl_wchar_8bit; |
|
|
|
static int mbfl_filt_conv_8bit_wchar(int c, mbfl_convert_filter *filter); |
|
|
|
static int mbfl_filt_conv_wchar_8bit(int c, mbfl_convert_filter *filter); |
|
|
|
|
|
|
|
static const char *mbfl_encoding_8bit_aliases[] = {"binary", NULL}; |
|
|
|
|
|
|
|
const mbfl_encoding mbfl_encoding_8bit = { |
|
|
|
@ -45,6 +50,42 @@ const mbfl_encoding mbfl_encoding_8bit = { |
|
|
|
(const char *(*)[])&mbfl_encoding_8bit_aliases, |
|
|
|
NULL, |
|
|
|
MBFL_ENCTYPE_SBCS, |
|
|
|
NULL, |
|
|
|
NULL |
|
|
|
&vtbl_8bit_wchar, |
|
|
|
&vtbl_wchar_8bit |
|
|
|
}; |
|
|
|
|
|
|
|
const struct mbfl_convert_vtbl vtbl_8bit_wchar = { |
|
|
|
mbfl_no_encoding_8bit, |
|
|
|
mbfl_no_encoding_wchar, |
|
|
|
mbfl_filt_conv_common_ctor, |
|
|
|
mbfl_filt_conv_common_dtor, |
|
|
|
mbfl_filt_conv_8bit_wchar, |
|
|
|
mbfl_filt_conv_common_flush |
|
|
|
}; |
|
|
|
|
|
|
|
const struct mbfl_convert_vtbl vtbl_wchar_8bit = { |
|
|
|
mbfl_no_encoding_wchar, |
|
|
|
mbfl_no_encoding_8bit, |
|
|
|
mbfl_filt_conv_common_ctor, |
|
|
|
mbfl_filt_conv_common_dtor, |
|
|
|
mbfl_filt_conv_wchar_8bit, |
|
|
|
mbfl_filt_conv_common_flush |
|
|
|
}; |
|
|
|
|
|
|
|
#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) |
|
|
|
|
|
|
|
static int mbfl_filt_conv_8bit_wchar(int c, mbfl_convert_filter *filter) |
|
|
|
{ |
|
|
|
return (*filter->output_function)(c, filter->data); |
|
|
|
} |
|
|
|
|
|
|
|
static int mbfl_filt_conv_wchar_8bit(int c, mbfl_convert_filter *filter) |
|
|
|
{ |
|
|
|
if (c >= 0 && c < 0x100) { |
|
|
|
CK((*filter->output_function)(c, filter->data)); |
|
|
|
} else { |
|
|
|
CK(mbfl_filt_conv_illegal_output(c, filter)); |
|
|
|
} |
|
|
|
|
|
|
|
return c; |
|
|
|
} |