QUOTE: |
// 在目錄項數據塊中搜索匹配指定文件名的目錄項,首先讓de 指向數據塊,並在不超過目錄中目錄項數 // 的條件下,循環執行搜索。 i = 0; de = (struct dir_entry *) bh->b_data; while (i < entries) ...{ // 如果當前目錄項數據塊已經搜索完,還沒有找到匹配的目錄項,則釋放當前目錄項數據塊。 if ((char *)de >= BLOCK_SIZE+bh->b_data) ...{ brelse(bh); bh = NULL; // 在讀入下一目錄項數據塊。若這塊為空,則只要還沒有搜索完目錄中的所有目錄項,就跳過該塊, // 繼續讀下一目錄項數據塊。若該塊不空,就讓de 指向該目錄項數據塊,繼續搜索。 if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || !(bh = bread((*dir)->i_dev,block))) ...{ i += DIR_ENTRIES_PER_BLOCK; continue; } de = (struct dir_entry *) bh->b_data; } // 如果找到匹配的目錄項的話,則返回該目錄項結構指針和該目錄項數據塊指針,退出。 if (match(namelen,name,de)) ...{ *res_dir = de; return bh; } // 否則繼續在目錄項數據塊中比較下一個目錄項。 de++; i++; } |
[火星人 ] Linux 內核小bug已經有488次圍觀