namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: use strerror()
Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:
>エラーメッセージの出力には次の関数を用います。どの関数も
>printf() と同じ書式を受けつけます。
>
> * nmz_warn_printf(): warning用 (単なる警告)
> * nmz_debug_printf(): debug用 (開発者向け)
この 2つはいいとして、
> * nmz_die(): すぐさま終了する (libnmz の中では使わない)
これは不要と判断して廃止しました。
> * set_dyingmsg(): libnmz内で起きたエラーの内容を記録する
これは、
> - エラーが起きた関数の名前も記録している (debug向け)
という約束が気持ち悪いので、(手動で関数名を引数に渡していた)
#define nmz_set_dyingmsg(msg) \
{ \
if (is_debugmode()) { \
nmz_set_dyingmsg_sub("%s:%d: %s", __FILE__, __LINE__, msg);\
} else { \
nmz_set_dyingmsg_sub("%s", msg);\
} \
}
なるマクロを定義して
nmz_set_dyingmsg(nmz_msg("%s", strerror(errno)));
のように使うことにしました。新しい方法の利点は次の 2つです。
* 関数名を手動で引数に渡す手間が省ける
* デバッグモードではファイル名と行番号を表示できる
たとえば、
namazu: Out of memory
で終了するときに、デバッグオプション -d を指定して namazu を
実行すれば、 Out of memory がどこで起こったかを調べられます。
namazu: search.c:329: Out of memory
そこまでする必要はあるかの? と疑問を感じなくもないですが、せっ
かく思いついたので導入しました。嫌になったら廃止すればいいで
すし。:-)
# "Out of memory" は strerror(errno)で取得するメッセージです
-- Satoru Takabayashi