@@ -92,10 +92,9 @@ const struct mbfl_convert_vtbl vtbl_wchar_uhc = {
92
92
93
93
#define CK (statement ) do { if ((statement) < 0) return (-1); } while (0)
94
94
95
- int
96
- mbfl_filt_conv_uhc_wchar (int c , mbfl_convert_filter * filter )
95
+ int mbfl_filt_conv_uhc_wchar (int c , mbfl_convert_filter * filter )
97
96
{
98
- int c1 , w = 0 , flag = 0 ;
97
+ int w = 0 , flag = 0 ;
99
98
100
99
switch (filter -> status ) {
101
100
case 0 :
@@ -105,15 +104,13 @@ mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter)
105
104
filter -> status = 1 ;
106
105
filter -> cache = c ;
107
106
} else {
108
- w = c & MBFL_WCSGROUP_MASK ;
109
- w |= MBFL_WCSGROUP_THROUGH ;
110
- CK ((* filter -> output_function )(w , filter -> data ));
107
+ CK ((* filter -> output_function )(c | MBFL_WCSGROUP_THROUGH , filter -> data ));
111
108
}
112
109
break ;
113
110
114
111
case 1 : /* dbcs second byte */
115
112
filter -> status = 0 ;
116
- c1 = filter -> cache ;
113
+ int c1 = filter -> cache ;
117
114
118
115
if (c1 >= 0x81 && c1 <= 0xa0 && c >= 0x41 && c <= 0xfe ) {
119
116
w = (c1 - 0x81 )* 190 + (c - 0x41 );
@@ -141,19 +138,10 @@ mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter)
141
138
}
142
139
}
143
140
144
- if (flag > 0 ) {
145
- if (w <= 0 ) {
146
- w = (c1 << 8 ) | c ;
147
- w &= MBFL_WCSPLANE_MASK ;
148
- w |= MBFL_WCSPLANE_UHC ;
149
- }
150
- CK ((* filter -> output_function )(w , filter -> data ));
151
- } else {
152
- w = (c1 << 8 ) | c ;
153
- w &= MBFL_WCSGROUP_MASK ;
154
- w |= MBFL_WCSGROUP_THROUGH ;
155
- CK ((* filter -> output_function )(w , filter -> data ));
141
+ if (flag <= 0 || w <= 0 ) {
142
+ w = (c1 << 8 ) | c | MBFL_WCSPLANE_UHC ;
156
143
}
144
+ CK ((* filter -> output_function )(w , filter -> data ));
157
145
break ;
158
146
159
147
default :
@@ -164,10 +152,23 @@ mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter)
164
152
return c ;
165
153
}
166
154
167
- int
168
- mbfl_filt_conv_wchar_uhc (int c , mbfl_convert_filter * filter )
155
+ static int mbfl_filt_conv_uhc_wchar_flush (mbfl_convert_filter * filter )
156
+ {
157
+ if (filter -> status == 1 ) {
158
+ /* 2-byte character was truncated */
159
+ CK ((* filter -> output_function )(filter -> cache | MBFL_WCSGROUP_THROUGH , filter -> data ));
160
+ }
161
+
162
+ if (filter -> flush_function ) {
163
+ (* filter -> flush_function )(filter -> data );
164
+ }
165
+
166
+ return 0 ;
167
+ }
168
+
169
+ int mbfl_filt_conv_wchar_uhc (int c , mbfl_convert_filter * filter )
169
170
{
170
- int c1 , s = 0 ;
171
+ int s = 0 ;
171
172
172
173
if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max ) {
173
174
s = ucs_a1_uhc_table [c - ucs_a1_uhc_table_min ];
@@ -185,16 +186,8 @@ mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter)
185
186
s = ucs_r2_uhc_table [c - ucs_r2_uhc_table_min ];
186
187
}
187
188
188
- if (s <= 0 ) {
189
- c1 = c & ~MBFL_WCSPLANE_MASK ;
190
- if (c1 == MBFL_WCSPLANE_UHC ) {
191
- s = c & MBFL_WCSPLANE_MASK ;
192
- }
193
- if (c == 0 ) {
194
- s = 0 ;
195
- } else if (s <= 0 ) {
196
- s = -1 ;
197
- }
189
+ if (s == 0 && c != 0 ) {
190
+ s = -1 ;
198
191
}
199
192
200
193
if (s >= 0 ) {
@@ -210,17 +203,3 @@ mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter)
210
203
211
204
return c ;
212
205
}
213
-
214
- static int mbfl_filt_conv_uhc_wchar_flush (mbfl_convert_filter * filter )
215
- {
216
- if (filter -> status == 1 ) {
217
- /* 2-byte character was truncated */
218
- CK ((* filter -> output_function )(filter -> cache | MBFL_WCSGROUP_THROUGH , filter -> data ));
219
- }
220
-
221
- if (filter -> flush_function ) {
222
- (* filter -> flush_function )(filter -> data );
223
- }
224
-
225
- return 0 ;
226
- }
0 commit comments