[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freewnn:00780] Re: [RFC] error.c rewrite



再び青野です。こんばんは。

<86y9jiyof7.wl@chrysanthe.oikumene.gcd.org>の記事において
hiroo@oikumene.gcd.orgさんは書きました。

>> > 変更点:
>> ざっと見ただけですが、これで良いのではないかと思います。
>> 細かいところはきちんと見ないといけないと思いますが、大筋は全
>> く文句ありません。
>> (私が考えていた変更はもっとちゃちなものだったので、書いていた
>> だけて嬉しいです)。

インデントなどのコーディングスタイルとログファイルの形式
(日付はCommon Log Formatに似せています)が一番気になってい
るのですが、その他の内容についても何かあればお願いします。

>> ついでに、error.c の使われていない部分は消してしまいませんか?

開発中のソースの入ったマシンがトラブルで使えなくなってます
ので、解決次第(思い切って)消してみます。

>> また、青野さんの patch の中身に直接は関係しないところで、
>> ・cmd_name を path 名にしてしまったが、やっぱり
>>   cmd_name は [jckt]server にして、
>>   argv[0] は起動された時 (かつ noisy の時?) に表示する

argv[0]は疑問が残りますが、そうしていただいたほうがよいと
思います。

>> ・debug 用 (& tcpserver 向け?) に端末を切り離す処理を今のよ
>>   うに compile 時に決定しないで、option で切替える

多分それも実装できるとありがたいと思います。
#それと同時に、機能追加は凍結して次の(アルファバージョン
#の?)リリースをしたほうがよいのではないかという気もしてい
#ます。

>> また、私が突っ込んだ strncpy() とか snprintf() は、buffer の長さを間違
>> えて考えていて、それでおかしな場合がある (buffer overflow している?) 
>> のではないかと思うので、見直しが必要です。
>> 幸い、error.c の部分は青野さんの patch でキャンセルされますが、他にも
>> いれたかは覚えていません…。

こちらはちょっと分からないのでパスします。

>> > 問題点:
>> > 
>> > - 元々error1()の文字列には改行記号("\n")が含まれているので一行に収まら
>> > ない。
>> 
>> これは、error1() を呼ぶ側で付けているからですよね?

御意。

>> 呼出側で改行をとるか、
>> vwrite_log() 末尾の
>> #ifdef SYSVR2                   /* I don't know it's useful ... (aono) */
>>   fprintf(fplog, " ,errno=%d", saved_errno);
>> #endif
>>   fputc('\n', fplog);
>> を削除するか
>> どちらの仕様にするかだと思います。
>> 原則的にエラー出力は1行ということなら、前者がよいと私は思います。

私もその方がよいと思いつつ、書き換えはまだ手をつけていません。

ついでに[freewnn:00774]のsignal_handlerについてもいくつか
コメントさせてください。ひとつは、どのシグナルを受けたかを
表示 or ログに記録した方がよいと思います。

もうひとつは、現在signal()によるシグナルハンドラの再定義は
SYSVR2のみとなっているのですが、ANSI C89的には必要となって
いるので#ifdef は取ってもいいのではないかと思います。
#古い環境でシグナルハンドラ再定義による弊害があるのならば
#また考える必要がありますが。

自分も書いてしまっているので大きなことは言えませんが、新し
く書くコードではSYSVR2などの(X由来の) システム固有のマクロ
で分岐するのを排除した方がよいと思います。(極力configureで
調べた結果(HAVE_hogeなど)で対処する方向で…。)移植性が多少
なりともあがると思います。
----
青野智樹	(aono@cc.osaka-kyoiku.ac.jp)


http://www.freewnn.org/ FreeWnn Project