I know I believe in nothing but it is my sweet nothing.:2003年08月13日分

2003/08/13(Wed)

zW

とりあえず置いとく。
/distfiles/citrus/NetBSD/citrus_zW-20030813.tar.bz2
やぱしSUS/C99のmbrtowcの仕様ではまともにzW encodingを扱うことはできないね。
いちどに喰わせるmultibyteの量 > 1なら、initial stateかつ最初の文字が'z'の場合
次の文字が'W'か否かを「盗み見る」ことで誤魔化せるんだけど、

do {
  char c = fgetc(fp);
  ret = mbrtowc(&wc, &c, 1, &state);
  if (errno)
    return(-1);
} while (ret == (size_t)-2);

みたいなコード(fgetwcなんかはまさにこんな実装)のように
1byteずつくべられるとまともに動かん。