summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c23
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h1
2 files changed, 21 insertions, 3 deletions
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
index 62cb186f9f..5653086647 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
@@ -139,7 +139,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis_docomo = {
mbfl_filt_conv_common_ctor,
mbfl_filt_conv_common_dtor,
mbfl_filt_conv_wchar_sjis_mobile,
- mbfl_filt_conv_common_flush
+ mbfl_filt_conv_sjis_mobile_flush
};
const struct mbfl_convert_vtbl vtbl_sjis_kddi_wchar = {
@@ -157,7 +157,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis_kddi = {
mbfl_filt_conv_common_ctor,
mbfl_filt_conv_common_dtor,
mbfl_filt_conv_wchar_sjis_mobile,
- mbfl_filt_conv_common_flush
+ mbfl_filt_conv_sjis_mobile_flush
};
const struct mbfl_convert_vtbl vtbl_sjis_sb_wchar = {
@@ -175,7 +175,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis_sb = {
mbfl_filt_conv_common_ctor,
mbfl_filt_conv_common_dtor,
mbfl_filt_conv_wchar_sjis_mobile,
- mbfl_filt_conv_common_flush
+ mbfl_filt_conv_sjis_mobile_flush
};
const struct mbfl_convert_vtbl vtbl_sjis_docomo_pua_wchar = {
@@ -1080,6 +1080,23 @@ mbfl_filt_conv_wchar_sjis_mobile(int c, mbfl_convert_filter *filter)
return c;
}
+int
+mbfl_filt_conv_sjis_mobile_flush(mbfl_convert_filter *filter)
+{
+ int c1 = filter->cache;
+ if (filter->status == 1 && (c1 == 0x0023 || (c1 >= 0x0030 && c1<=0x0039))) {
+ CK((*filter->output_function)(c1, filter->data));
+ }
+ filter->status = 0;
+ filter->cache = 0;
+
+ if (filter->flush_function != NULL) {
+ return (*filter->flush_function)(filter->data);
+ }
+
+ return 0;
+}
+
static int mbfl_filt_ident_sjis_mobile(int c, mbfl_identify_filter *filter)
{
if (filter->status) { /* kanji second char */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h
index 405577ca89..bf504ff3b3 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h
@@ -60,5 +60,6 @@ extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_sb_pua;
int mbfl_filt_conv_sjis_mobile_wchar(int c, mbfl_convert_filter *filter);
int mbfl_filt_conv_wchar_sjis_mobile(int c, mbfl_convert_filter *filter);
+int mbfl_filt_conv_sjis_mobile_flush(mbfl_convert_filter *filter);
#endif /* MBFL_MBFILTER_SJIS_MOBILE_H */