2004/11/22(Mon)
○
@vfscanf/vfprintf
おもいっきりwchar_tの中身を覗いてるとことか、
酷いコードだったのでちょっとコードを整理。
先日の^[$B%s%s ... を食わせるとinput_failureってのは
今のcitrus_iso2022.cの実装からすると誤り、^[$B%sまで変換したところで
mbsinitは0を返す(initial state)のでマッチします。
JISが呼び出されてるのにinitial stateってのは違和感有るけどまあいいや。
あと下のコードがAbortしてしまうのはバグですかね?
#include <errno.h>
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main(int argc, char **argv)
{
wchar_t wc;
char *s = "^[$B%s^[(B^[$B%s^[(B";
mbstate_t st;
int n;
setlocale(LC_CTYPE, "ja_JP.ISO2022-JP");
memset(&st, 0, sizeof(st));
for (;;) {
n = mbrtowc(&wc, s, 1, &st);
if (n == (size_t)-1) {
abort();
} else if (n == (size_t)-2) {
s++;
} else {
s += n;
if (wc == 0)
break;
}
}
return (0);
}