実装しはじめたけど
~{~}~{~}~{~}...
みたいな冗長なエスケープシーケンスがあった場合、
- MB_LEN_MAX溢れたら0を返せば良い
- wchar_tへの変換の過程で冗長部は失われてしまっても構わない
なんで、特に悩まないでも良さそうだ。
少なくともCitrus XPG4DLのISO2022実装はそうなってる模様↓
#include <limits.h>
#include <locale.h>
#include <wchar.h>
int main(void) {
char s0[] = {0x1b, 0x24, 0x42, 0x1b, 0x24, 0x42, 0x1b, 0x24, 0x42, 0x24, 0x22, 0x0 },
s1[MB_LEN_MAX];
wchar_t wc;
setlocale(LC_CTYPE, "ja_JP.ISO2022-JP");
printf("%d\n", mbtowc(&wc, s0, sizeof(s0))); /* -> 変換結果11byte */
printf("%d\n", wctomb(s1, wc)); -> /* 変換結果5byte */
}
glibc2はどうしてるのかは確認できず。