御回答ありがとうございます。

From: HIGASHI Taku <ool...@cslab.co.jp>
Subject: [FreeBSD-users-jp 92593] Re: w -n?
Date: Tue, 17 Nov 2009 15:28:46 +0900

> 私のところ(FreeBSD 7.2-RELEASE-p4)では問題無いです。

FreeBSD 7.2-RELEASE-p4 i386 で試しましたが、
w -n でもホスト名が表示されてしまいました。
何が違うのでしょうね?


> ざっくりソースを眺めましたが、-nが指定されたときに設定される 
> nflagが未初期化(初期値不定)であることから、以下の処理に
> 入ってしまうのではないでしょうか。
> 
> if (!nflag) {
>   /* 逆引き処理 */
> }

ちょっと gdb で追いかけてみました。

nflag は global 変数なので 0 で初期化されているはずです。
また問題なのは -n 指定時なので、nflag は必ず 1 に設定され、
上記コードは実行されません。


どうも /var/run/utmp からして既にホスト名で入ってるようなので、
ep->utmp.ut_host にはホスト名が入ることになります。

それで FreeBSD 4.11 の w.c は -n 指定時わざわざそれを
gethostbyname(3) して inet_ntoa(3) して表示しています。
-n の動作は「逆引きしない」ではなく「正引きして表示する」が実情なようです。

7.2R のコードではその部分がそっくり存在しないような気がします。



神田

メールによる返信