[1199] Re:os
投稿者:kit
2009/01/07 13:57:56
>>Debian(etch) にて
>>上の方にある同じ abort エラーがでました.
この etch のエラーは、日本語EUC localeがインストールされてないため出ている
エラーでしょう。Debian でのやり方は知りませんが、日本語 EUC locale をイン
ストールすれば直るのでは?
つまりdiksamではなく、利用環境の側の問題だと思います。
>>% printenv LANG
>>ja_JP.EUC-JP
>>% locale -a
>>locale: Cannot set LC_CTYPE to default locale: No such file or directory
>>locale: Cannot set LC_MESSAGES to default locale: No such file or directory
>>locale: Cannot set LC_COLLATE to default locale: No such file or directory
>>C
>>POSIX
>>ja_JP.utf8
>
>locale -aで出てこないものをLANGにセットしても無駄だ、というのが
>マニュアル的な解釈だと思うのですが、
そうです。したがって、locale -a で
ja_JP.eucjp
が表示されるような環境設定が必須です。
>そもそも私の環境でも
>
>ja_JP.eucjp
>
>は出ても、
>
>ja_JP.EUC-JP
>
>は出ないんですよね。でも、LANGやsetlocaleで効くのはja_JP.EUC-JPのほうで、
>ja_JP.eucjpではないという。
ja_JP.eucjp と設定しても動きます。
Linux の locale 名解釈ルーチンは変態的で、ja_JP.EUC-JP, ja_JP.eucjp,
ja_JP.eucJP を全て同一視します。こんな動作をするUNIX系OSは、知る限り
Linuxだけです。
日本語EUC locale 名としては ja_JP.eucJP を使うのが最も一般性があり、
Linux に限らず、多くの UNIX 系 OS で通用するので、そちらを勧めます。
あと、
#define MULTIBYTE_CHAR_SIZE_MAX (6)
というのは良くないコーディングスタイルだと思うんですが、
#include <limits.h> して MB_LEN_MAX を使わないのはなぜなんでしょう?
(Linux の場合でも MB_LEN_MAX は 16、NetBSD あたりだと MB_LEN_MAX は 32 です。)
標準の mbstowcs() や wcstombs() を使わずに、dvm_mbstowcs() や
dvm_mbstowcs_len() を用意している理由も良く分かりませんでした。