commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[2242] 2009-06-04 Robert Millan <address@hidden>


From: Robert Millan
Subject: [2242] 2009-06-04 Robert Millan <address@hidden>
Date: Thu, 04 Jun 2009 11:18:18 +0000

Revision: 2242
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2242
Author:   robertmh
Date:     2009-06-04 11:18:18 +0000 (Thu, 04 Jun 2009)
Log Message:
-----------
2009-06-04  Robert Millan  <address@hidden>

        Simplify the code duplication in commands/search.c.

        * commands/search.c (search_label, search_fs_uuid): Merge into ...
        (search_fs): ... this.  Update all users.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/commands/search.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2009-06-03 13:53:10 UTC (rev 2241)
+++ trunk/grub2/ChangeLog       2009-06-04 11:18:18 UTC (rev 2242)
@@ -1,3 +1,10 @@
+2009-06-04  Robert Millan  <address@hidden>
+
+       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  <address@hidden>
 
        * util/grub-mkconfig.in (update_grub_dir): Rename to grub_mkconfig_dir.

Modified: trunk/grub2/commands/search.c
===================================================================
--- trunk/grub2/commands/search.c       2009-06-03 13:53:10 UTC (rev 2241)
+++ trunk/grub2/commands/search.c       2009-06-04 11:18:18 UTC (rev 2242)
@@ -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 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 @@
          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);
-}
+#define QUID(x)        (is_uuid ? (x)->uuid : (x)->label)
 
-static void
-search_fs_uuid (const char *key, const char *var)
-{
-  int count = 0;
-  auto int iterate_device (const char *name);
-
-  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 @@
                          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 @@
     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);
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]