]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-06-04 Robert Millan <rmh.grub@aybabtu.com>
authorrobertmh <robertmh@localhost>
Thu, 4 Jun 2009 11:18:18 +0000 (11:18 +0000)
committerrobertmh <robertmh@localhost>
Thu, 4 Jun 2009 11:18:18 +0000 (11:18 +0000)
        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
commands/search.c

index cc11a9875870697abb2faf55968799ed6ebb49d6..d79342f8e6649c100f633bf1e0b143167fd183f1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-06-04  Robert Millan  <rmh.grub@aybabtu.com>
+
+       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  <fzielcke@z-51.de>
 
        * util/grub-mkconfig.in (update_grub_dir): Rename to grub_mkconfig_dir.
index 03884a9f23e5c1ca60a900ed5def822cc3a53663..5f8d1b51ddc3b0ebc996baa1fe3d353be0854028 100644 (file)
@@ -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);