aboutsummaryrefslogtreecommitdiff
path: root/iconvdata
diff options
context:
space:
mode:
Diffstat (limited to 'iconvdata')
-rw-r--r--iconvdata/iso-2022-cn-ext.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/iconvdata/iso-2022-cn-ext.c b/iconvdata/iso-2022-cn-ext.c
index d6ab2e8bbe..ab8a988550 100644
--- a/iconvdata/iso-2022-cn-ext.c
+++ b/iconvdata/iso-2022-cn-ext.c
@@ -260,21 +260,33 @@ enum
XXX For now I'll default to use GB2312. If this is not the \
best behavior (e.g., we should flag an error) let me know. */ \
++inptr; \
- switch (ann & SO_ann) \
+ if ((ann & SO_ann) != 0) \
+ switch (ann & SO_ann) \
+ { \
+ case GB2312_ann: \
+ set = GB2312_set; \
+ break; \
+ case GB12345_ann: \
+ set = GB12345_set; \
+ break; \
+ case CNS11643_1_ann: \
+ set = CNS11643_1_set; \
+ break; \
+ case ISO_IR_165_ann: \
+ set = ISO_IR_165_set; \
+ break; \
+ default: \
+ abort (); \
+ } \
+ else \
{ \
- case GB2312_ann: \
- set = GB2312_set; \
- break; \
- case GB12345_ann: \
- set = GB12345_set; \
- break; \
- case CNS11643_1_ann: \
- set = CNS11643_1_set; \
- break; \
- default: \
- assert ((ann & SO_ann) == ISO_IR_165_ann); \
- set = ISO_IR_165_set; \
- break; \
+ if (! ignore_errors_p ()) \
+ { \
+ result = __GCONV_ILLEGAL_INPUT; \
+ break; \
+ } \
+ ++inptr; \
+ ++*irreversible; \
} \
continue; \
} \