From 2bf5885a3da47b2d90b0a7979fc78a6378247efb Mon Sep 17 00:00:00 2001 From: robertmh Date: Thu, 4 Jun 2009 11:18:18 +0000 Subject: [PATCH] 2009-06-04 Robert Millan Simplify the code duplication in commands/search.c. * commands/search.c (search_label, search_fs_uuid): Merge into ... (search_fs): ... this. Update all users. --- ChangeLog | 7 +++++ commands/search.c | 79 +++++++++-------------------------------------- 2 files changed, 21 insertions(+), 65 deletions(-) diff --git a/ChangeLog b/ChangeLog index cc11a9875..d79342f8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-06-04 Robert Millan + + Simplify the code duplication in commands/search.c. + + * commands/search.c (search_label, search_fs_uuid): Merge into ... + (search_fs): ... this. Update all users. + 2009-06-03 Felix Zielcke * util/grub-mkconfig.in (update_grub_dir): Rename to grub_mkconfig_dir. diff --git a/commands/search.c b/commands/search.c index 03884a9f2..5f8d1b51d 100644 --- a/commands/search.c +++ b/commands/search.c @@ -1,7 +1,7 @@ /* search.c - search devices based on a file or a filesystem label */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2005,2007,2008 Free Software Foundation, Inc. + * Copyright (C) 2005,2007,2008,2009 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,11 +37,11 @@ static const struct grub_arg_option options[] = }; static void -search_label (const char *key, const char *var) +search_fs (const char *key, const char *var, int is_uuid) { int count = 0; auto int iterate_device (const char *name); - + int iterate_device (const char *name) { grub_device_t dev; @@ -53,68 +53,17 @@ search_label (const char *key, const char *var) grub_fs_t fs; fs = grub_fs_probe (dev); - if (fs && fs->label) - { - char *label; - - (fs->label) (dev, &label); - if (grub_errno == GRUB_ERR_NONE && label) - { - if (grub_strcmp (label, key) == 0) - { - /* Found! */ - count++; - if (var) - { - grub_env_set (var, name); - abort = 1; - } - else - grub_printf (" %s", name); - } - - grub_free (label); - } - } - - grub_device_close (dev); - } - - grub_errno = GRUB_ERR_NONE; - return abort; - } - - grub_device_iterate (iterate_device); - - if (count == 0) - grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such device: %s", key); -} -static void -search_fs_uuid (const char *key, const char *var) -{ - int count = 0; - auto int iterate_device (const char *name); +#define QUID(x) (is_uuid ? (x)->uuid : (x)->label) - int iterate_device (const char *name) - { - grub_device_t dev; - int abort = 0; - - dev = grub_device_open (name); - if (dev) - { - grub_fs_t fs; - - fs = grub_fs_probe (dev); - if (fs && fs->uuid) + if (fs && QUID(fs)) { - char *uuid; + char *quid; - (fs->uuid) (dev, &uuid); - if (grub_errno == GRUB_ERR_NONE && uuid) + (QUID(fs)) (dev, &quid); + if (grub_errno == GRUB_ERR_NONE && quid) { - if (grub_strcasecmp (uuid, key) == 0) + if (grub_strcmp (quid, key) == 0) { /* Found! */ count++; @@ -124,16 +73,16 @@ search_fs_uuid (const char *key, const char *var) abort = 1; } else - grub_printf (" %s", name); + grub_printf (" %s", name); } - grub_free (uuid); + grub_free (quid); } } grub_device_close (dev); } - + grub_errno = GRUB_ERR_NONE; return abort; } @@ -207,9 +156,9 @@ grub_cmd_search (grub_extcmd_t cmd, int argc, char **args) var = state[3].arg ? state[3].arg : "root"; if (state[1].set) - search_label (args[0], var); + search_fs (args[0], var, 0); else if (state[2].set) - search_fs_uuid (args[0], var); + search_fs (args[0], var, 1); else search_file (args[0], var); -- 2.47.3