[2242] 2009-06-04 Robert Millan <[email protected]>

Robert Millan <[email protected]>
Newsgroups gmane.comp.boot-loaders.grub.cvs
Message-ID <[email protected]>
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  <[email protected]>

        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  <[email protected]>
+
+	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  <[email protected]>
 
 	* 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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.