3636
3737#include "mbfilter.h"
3838
39+ const struct mbfl_convert_vtbl vtbl_8bit_wchar ;
40+ const struct mbfl_convert_vtbl vtbl_wchar_8bit ;
41+ static int mbfl_filt_conv_8bit_wchar (int c , mbfl_convert_filter * filter );
42+ static int mbfl_filt_conv_wchar_8bit (int c , mbfl_convert_filter * filter );
43+
3944static const char * mbfl_encoding_8bit_aliases [] = {"binary" , NULL };
4045
4146const mbfl_encoding mbfl_encoding_8bit = {
@@ -45,6 +50,42 @@ const mbfl_encoding mbfl_encoding_8bit = {
4550 (const char * (* )[])& mbfl_encoding_8bit_aliases ,
4651 NULL ,
4752 MBFL_ENCTYPE_SBCS ,
48- NULL ,
49- NULL
53+ & vtbl_8bit_wchar ,
54+ & vtbl_wchar_8bit
55+ };
56+
57+ const struct mbfl_convert_vtbl vtbl_8bit_wchar = {
58+ mbfl_no_encoding_8bit ,
59+ mbfl_no_encoding_wchar ,
60+ mbfl_filt_conv_common_ctor ,
61+ mbfl_filt_conv_common_dtor ,
62+ mbfl_filt_conv_8bit_wchar ,
63+ mbfl_filt_conv_common_flush
64+ };
65+
66+ const struct mbfl_convert_vtbl vtbl_wchar_8bit = {
67+ mbfl_no_encoding_wchar ,
68+ mbfl_no_encoding_8bit ,
69+ mbfl_filt_conv_common_ctor ,
70+ mbfl_filt_conv_common_dtor ,
71+ mbfl_filt_conv_wchar_8bit ,
72+ mbfl_filt_conv_common_flush
5073};
74+
75+ #define CK (statement ) do { if ((statement) < 0) return (-1); } while (0)
76+
77+ static int mbfl_filt_conv_8bit_wchar (int c , mbfl_convert_filter * filter )
78+ {
79+ return (* filter -> output_function )(c , filter -> data );
80+ }
81+
82+ static int mbfl_filt_conv_wchar_8bit (int c , mbfl_convert_filter * filter )
83+ {
84+ if (c >= 0 && c < 0x100 ) {
85+ CK ((* filter -> output_function )(c , filter -> data ));
86+ } else {
87+ CK (mbfl_filt_conv_illegal_output (c , filter ));
88+ }
89+
90+ return c ;
91+ }
0 commit comments