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 さんのエントリ発見
メモを見てみるにえらい大層なことをやってるんですね。このメモを確認させて頂きつつ中身をチェックしてみます。ありがたや。