Lions' 本読み (111)

朝練エントリです。namei 手続きをもう少し。
7583 あたりから 7649 あたりまで、ディレクトリの探索をしてます。正確には 7592 の eloop なラベルから 7647 ということになるのかどうか。
で、このループ部分でいくつかよく分からない部分があるので控えを残しつつ確認してみることにします。
とりあえず疑問点のみ先に控えておく方向で。

u.u_count

7589 にて初期設定されてます。

7589    u.u_count = ldiv(dp->i_size1, DIRSIZ+2);

テキスト 405p では

u.u_count にディレクトリのエントリ数を設定する。

Lions' Commentary on UNIX より引用
という記述があるのですが_ディレクトリのエントリ数_って何ね、という世界だったりして。とりあえず控えのみ、ってことで。

eo という変数について

7588 で 0 が代入されてます。

7588    eo = 0;

この変数もループの中で云々されているのですがテキストの記述が以下。

7607:
以前に新しいディレクトリエントリに適したスロットが見つかっていれば (7642)、u.u_offset[1] にその値を格納する。そうでなければ、i ノードを示す dp の IUPD フラグをセットする (なぜか考えよ)。

Lions' Commentary on UNIX より引用
7642 あたりの手続きの記述が以下。

7640    if(u.u_dent.u_ino == 0) {
7641            if(eo == 0)
7642                    eo = u.u_offset[1];
7643            goto eloop;
7644    }

で、7607 あたりの記述が以下。

7607                    if(eo)
7608                            u.u_offset[1] = eo-DIRSIZ-2; else
7609                            dp->i_flag =| IUPD;

むむ、ワケワカだ。とりあえず ldiv という手続きを確認してみます。

@superhoge さんのエントリ発見

メモを見てみるにえらい大層なことをやってるんですね。このメモを確認させて頂きつつ中身をチェックしてみます。ありがたや。