Bruce. です。
> 何気なしにcygwin1.dllでexportしている関数を眺めていると、mbrlenとmbrtowcが
> exportされていることを発見。これらの関数はgawkなどでのルチバイト対応で使わ
> れている関数。おお、なんだそうなのかとチェックプログラムを書いて試してみる
> と、どうも「なんちゃって実装」のようだ。まあまじめに実装するとデータベース
> がでかいしねえ・・・
ソースを調べてみました。思ったよりはまともな実装なようです。チェックプログラム
がうまくいかなかったのは、setlocaleするときのlocaleの設定文字列が間違っていた
ためでした。
ja_JP_eucJPのような形式ではなく、
C-EUCJP
C-SJIS
C-UTF-8
C-JIS
C-ISO-8859-1
のような文字列で指定するのでした。ただ、プログラム上でsetlocale(LC_ALL,"")と
したときの動作がLinuxのそれとは異なるため、mb*関数群が使えたとしてもそのまま
ではプログラムはマルチバイト文字対応にはなりません(この辺の状況はVC++を使った
ときと同じ)。
locale.tex
This is a minimal implementation, supporting only the required @code{"C"}
value for locale; strings representing other locales are not
honored. (@code{""} is also accepted; it represents the default locale
for an implementation, here equivalent to @code{"C"}.
この辺の事情は以下に少し書かれています。
http://www.okisoft.co.jp/esc/cygwin-5.html
5.3 多バイト文字関数と locale についての制限
この辺をいじったとして、マルチバイト文字対応のものが問題なくビルドできるか
どうかまでは時間がなかったので調べてません。
--
木村浩一
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mail kbk@...
web www.kt.rim.or.jp/~kbk/
homepage3.nifty.com/farstar/