diff options
Diffstat (limited to 'e2fsprogs')
-rw-r--r-- | e2fsprogs/chattr.c | 2 | ||||
-rw-r--r-- | e2fsprogs/e2fs_lib.c | 21 | ||||
-rw-r--r-- | e2fsprogs/e2fs_lib.h | 2 | ||||
-rw-r--r-- | e2fsprogs/lsattr.c | 5 |
4 files changed, 9 insertions, 21 deletions
diff --git a/e2fsprogs/chattr.c b/e2fsprogs/chattr.c index b41919b..ab52cb0 100644 --- a/e2fsprogs/chattr.c +++ b/e2fsprogs/chattr.c @@ -67,7 +67,7 @@ static int decode_arg(const char *arg, struct globals *gp) static void change_attributes(const char *name, struct globals *gp); -static int chattr_dir_proc(const char *dir_name, struct dirent *de, void *gp) +static int FAST_FUNC chattr_dir_proc(const char *dir_name, struct dirent *de, void *gp) { char *path = concat_subpath_file(dir_name, de->d_name); /* path is NULL if de->d_name is "." or "..", else... */ diff --git a/e2fsprogs/e2fs_lib.c b/e2fsprogs/e2fs_lib.c index 3e8d956..70ae1f4 100644 --- a/e2fsprogs/e2fs_lib.c +++ b/e2fsprogs/e2fs_lib.c @@ -28,33 +28,20 @@ static void close_silently(int fd) /* Iterate a function on each entry of a directory */ int iterate_on_dir(const char *dir_name, - int (*func)(const char *, struct dirent *, void *), - void * private) + int FAST_FUNC (*func)(const char *, struct dirent *, void *), + void *private) { DIR *dir; - struct dirent *de, *dep; - int max_len, len; - - max_len = PATH_MAX + sizeof(struct dirent); - de = xmalloc(max_len+1); - memset(de, 0, max_len+1); + struct dirent *de; dir = opendir(dir_name); if (dir == NULL) { - free(de); return -1; } - while ((dep = readdir(dir))) { - len = sizeof(struct dirent); - if (len < dep->d_reclen) - len = dep->d_reclen; - if (len > max_len) - len = max_len; - memcpy(de, dep, len); + while ((de = readdir(dir)) != NULL) { func(dir_name, de, private); } closedir(dir); - free(de); return 0; } diff --git a/e2fsprogs/e2fs_lib.h b/e2fsprogs/e2fs_lib.h index 25b26d3..3905ee7 100644 --- a/e2fsprogs/e2fs_lib.h +++ b/e2fsprogs/e2fs_lib.h @@ -13,7 +13,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN /* Iterate a function on each entry of a directory */ int iterate_on_dir(const char *dir_name, - int (*func)(const char *, struct dirent *, void *), + int FAST_FUNC (*func)(const char *, struct dirent *, void *), void *private); /* Get/set a file version on an ext2 file system */ diff --git a/e2fsprogs/lsattr.c b/e2fsprogs/lsattr.c index 23a54b7..7d475a9 100644 --- a/e2fsprogs/lsattr.c +++ b/e2fsprogs/lsattr.c @@ -57,8 +57,9 @@ static void list_attributes(const char *name) bb_perror_msg("reading %s", name); } -static int lsattr_dir_proc(const char *dir_name, struct dirent *de, - void *private UNUSED_PARAM) +static int FAST_FUNC lsattr_dir_proc(const char *dir_name, + struct dirent *de, + void *private UNUSED_PARAM) { struct stat st; char *path; |