summaryrefslogtreecommitdiff
path: root/e2fsck/dirinfo.c
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>1997-04-29 16:15:03 +0000
committerTheodore Ts'o <tytso@mit.edu>1997-04-29 16:15:03 +0000
commit21c84b71e205b5ab13f14343da5645dcc985856d (patch)
treecc2158df261634459b5364f27cdd0298a9260179 /e2fsck/dirinfo.c
parentf45a038dbe59be10c4d6d58f1108f67a216192bc (diff)
downloade2fsprogs-21c84b71e205b5ab13f14343da5645dcc985856d.tar.gz
Many files:
Checked in e2fsprogs-1.07
Diffstat (limited to 'e2fsck/dirinfo.c')
-rw-r--r--e2fsck/dirinfo.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/e2fsck/dirinfo.c b/e2fsck/dirinfo.c
index 6c78dd1f..5218234c 100644
--- a/e2fsck/dirinfo.c
+++ b/e2fsck/dirinfo.c
@@ -24,12 +24,11 @@ int get_num_dirs(ext2_filsys fs)
}
/*
- * This subroutine is called during pass1 to stash away the block
- * numbers for the directory, which we will need later. The idea is
- * to avoid reading directory inodes twice.
+ * This subroutine is called during pass1 to create a directory info
+ * entry. During pass1, the passed-in parent is 0; it will get filled
+ * in during pass2.
*/
-void add_dir_info(ext2_filsys fs, ino_t ino, ino_t parent,
- struct ext2_inode *inode)
+void add_dir_info(ext2_filsys fs, ino_t ino, ino_t parent)
{
struct dir_info *dir;
int i, j;
@@ -61,7 +60,7 @@ void add_dir_info(ext2_filsys fs, ino_t ino, ino_t parent,
* the dir_info array needs to be sorted by inode number for
* get_dir_info()'s sake.
*/
- if (dir_info_count && dir_info[dir_info_count-1].ino > ino) {
+ if (dir_info_count && dir_info[dir_info_count-1].ino >= ino) {
for (i = dir_info_count-1; i > 0; i--)
if (dir_info[i-1].ino < ino)
break;
@@ -87,6 +86,8 @@ struct dir_info *get_dir_info(ino_t ino)
low = 0;
high = dir_info_count-1;
+ if (!dir_info)
+ return 0;
if (ino == dir_info[low].ino)
return &dir_info[low];
if (ino == dir_info[high].ino)
@@ -118,3 +119,14 @@ void free_dir_info(ext2_filsys fs)
dir_info_size = 0;
dir_info_count = 0;
}
+
+/*
+ * A simple interator function
+ */
+struct dir_info *dir_info_iter(int *control)
+{
+ if (*control >= dir_info_count)
+ return 0;
+
+ return(dir_info + (*control)++);
+}