This patch refactors out the logic that applies filters to files for reuse in other code.
Signed-off-by: Paul Dagnelie <p...@delphix.com> --- grub-core/kern/file.c | 46 +++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/grub-core/kern/file.c b/grub-core/kern/file.c index 58454458c..75eb5e2fa 100644 --- a/grub-core/kern/file.c +++ b/grub-core/kern/file.c @@ -57,14 +57,37 @@ grub_file_get_device_name (const char *name) return 0; } +static grub_file_t +grub_apply_file_filters (grub_file_t file, enum grub_file_type type, const char *name) +{ + grub_file_filter_id_t filter; + grub_file_t last_file = NULL; + + for (filter = 0; file && filter < ARRAY_SIZE (grub_file_filters); + filter++) + if (grub_file_filters[filter]) + { + last_file = file; + file = grub_file_filters[filter] (file, type); + if (file && file != last_file) + { + file->name = grub_strdup (name); + grub_errno = GRUB_ERR_NONE; + } + } + if (!file) + grub_file_close (last_file); + + return file; +} + grub_file_t grub_file_open (const char *name, enum grub_file_type type) { - grub_device_t device = 0; - grub_file_t file = 0, last_file = 0; + grub_device_t device = NULL; + grub_file_t file = NULL; char *device_name; const char *file_name; - grub_file_filter_id_t filter; device_name = grub_file_get_device_name (name); if (grub_errno) @@ -113,22 +136,7 @@ grub_file_open (const char *name, enum grub_file_type type) file->name = grub_strdup (name); grub_errno = GRUB_ERR_NONE; - for (filter = 0; file && filter < ARRAY_SIZE (grub_file_filters); - filter++) - if (grub_file_filters[filter]) - { - last_file = file; - file = grub_file_filters[filter] (file, type); - if (file && file != last_file) - { - file->name = grub_strdup (name); - grub_errno = GRUB_ERR_NONE; - } - } - if (!file) - grub_file_close (last_file); - - return file; + return grub_apply_file_filters(file, type, name); fail: if (device) -- 2.19.0 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel