commit-grub
[Top][All Lists]
Advanced

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

[2402] 2009-07-07 Pavel Roskin <address@hidden>


From: Pavel Roskin
Subject: [2402] 2009-07-07 Pavel Roskin <address@hidden>
Date: Tue, 07 Jul 2009 20:13:39 +0000

Revision: 2402
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2402
Author:   proski
Date:     2009-07-07 20:13:39 +0000 (Tue, 07 Jul 2009)
Log Message:
-----------
2009-07-07  Pavel Roskin  <address@hidden>

        * commands/search.c (search_file): Merge into ...
        (search_fs): ... this.  Accept search type as argument.
        (grub_cmd_search): Pass search type to search_fs().

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

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2009-07-07 20:03:03 UTC (rev 2401)
+++ trunk/grub2/ChangeLog       2009-07-07 20:13:39 UTC (rev 2402)
@@ -1,5 +1,9 @@
 2009-07-07  Pavel Roskin  <address@hidden>
 
+       * commands/search.c (search_file): Merge into ...
+       (search_fs): ... this.  Accept search type as argument.
+       (grub_cmd_search): Pass search type to search_fs().
+
        * include/grub/util/console.h: New file.
        * util/console.c: Use it instead of grub/machine/console.h.
        * util/grub-emu.c: Likewise.

Modified: trunk/grub2/commands/search.c
===================================================================
--- trunk/grub2/commands/search.c       2009-07-07 20:03:03 UTC (rev 2401)
+++ trunk/grub2/commands/search.c       2009-07-07 20:13:39 UTC (rev 2402)
@@ -47,126 +47,96 @@
  };
 
 static void
-search_fs (const char *key, const char *var, int no_floppy, int is_uuid)
+search_fs (const char *key, const char *var, int no_floppy, enum options type)
 {
   int count = 0;
-  auto int iterate_device (const char *name);
+  char *buf = NULL;
 
+  auto int iterate_device (const char *name);
   int iterate_device (const char *name)
-    {
-      grub_device_t dev;
-      int abort = 0;
+  {
+    int found = 0;
 
-      /* Skip floppy drives when requested.  */
-      if (no_floppy &&
-         name[0] == 'f' && name[1] == 'd' &&
-         name[2] >= '0' && name[2] <= '9')
-       return 0;
+    /* Skip floppy drives when requested.  */
+    if (no_floppy &&
+       name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
+      return 0;
 
-      dev = grub_device_open (name);
-      if (dev)
-       {
-         grub_fs_t fs;
-         int (*compare_fn) (const char *, const char *);
+    if (type == SEARCH_FILE)
+      {
+       grub_size_t len;
+       char *p;
+       grub_file_t file;
 
-         fs = grub_fs_probe (dev);
-         compare_fn = is_uuid ? grub_strcasecmp : grub_strcmp;
+       len = grub_strlen (name) + 2 + grub_strlen (key) + 1;
+       p = grub_realloc (buf, len);
+       if (! p)
+         return 1;
 
-         if (fs && (is_uuid ? fs->uuid : fs->label))
-           {
-             char *quid;
+       buf = p;
+       grub_sprintf (buf, "(%s)%s", name, key);
 
-             if (is_uuid)
-               fs->uuid (dev, &quid);
-             else
-               fs->label (dev, &quid);
+       file = grub_file_open (buf);
+       if (file)
+         {
+           found = 1;
+           grub_file_close (file);
+         }
+      }
+    else
+      {
+       /* type is SEARCH_FS_UUID or SEARCH_LABEL */
+       grub_device_t dev;
+       grub_fs_t fs;
+       int (*compare_fn) (const char *, const char *);
+       char *quid;
 
-             if (grub_errno == GRUB_ERR_NONE && quid)
-               {
-                 if (compare_fn (quid, key) == 0)
-                   {
-                     /* Found!  */
-                     count++;
-                     if (var)
-                       {
-                         grub_env_set (var, name);
-                         abort = 1;
-                       }
-                     else
-                         grub_printf (" %s", name);
-                   }
+       dev = grub_device_open (name);
+       if (dev)
+         {
+           fs = grub_fs_probe (dev);
+           compare_fn =
+             (type == SEARCH_FS_UUID) ? grub_strcasecmp : grub_strcmp;
 
-                 grub_free (quid);
-               }
-           }
+           if (fs && ((type == SEARCH_FS_UUID) ? fs->uuid : fs->label))
+             {
+               if (type == SEARCH_FS_UUID)
+                 fs->uuid (dev, &quid);
+               else
+                 fs->label (dev, &quid);
 
-         grub_device_close (dev);
-       }
+               if (grub_errno == GRUB_ERR_NONE && quid)
+                 {
+                   if (compare_fn (quid, key) == 0)
+                     found = 1;
 
-      grub_errno = GRUB_ERR_NONE;
-      return abort;
-    }
+                   grub_free (quid);
+                 }
+             }
 
-  grub_device_iterate (iterate_device);
+           grub_device_close (dev);
+         }
+      }
 
-  if (count == 0)
-    grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such device: %s", key);
-}
+    if (found)
+      {
+       count++;
+       if (var)
+         grub_env_set (var, name);
+       else
+         grub_printf (" %s", name);
+      }
 
-static void
-search_file (const char *key, const char *var, int no_floppy)
-{
-  int count = 0;
-  char *buf = 0;
-  auto int iterate_device (const char *name);
+    grub_errno = GRUB_ERR_NONE;
+    return (found && var);
+  }
 
-  int iterate_device (const char *name)
-    {
-      grub_size_t len;
-      char *p;
-      grub_file_t file;
-      int abort = 0;
-
-      /* Skip floppy drives when requested.  */
-      if (no_floppy &&
-         name[0] == 'f' && name[1] == 'd' &&
-         name[2] >= '0' && name[2] <= '9')
-       return 0;
-
-      len = grub_strlen (name) + 2 + grub_strlen (key) + 1;
-      p = grub_realloc (buf, len);
-      if (! p)
-       return 1;
-
-      buf = p;
-      grub_sprintf (buf, "(%s)%s", name, key);
-
-      file = grub_file_open (buf);
-      if (file)
-       {
-         /* Found!  */
-         count++;
-         if (var)
-           {
-             grub_env_set (var, name);
-             abort = 1;
-           }
-         else
-           grub_printf (" %s", name);
-
-         grub_file_close (file);
-       }
-
-      grub_errno = GRUB_ERR_NONE;
-      return abort;
-    }
-
   grub_device_iterate (iterate_device);
 
   grub_free (buf);
 
   if (grub_errno == GRUB_ERR_NONE && count == 0)
-    grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such file: %s", key);
+    grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such device: %s", key);
 }
 
 static grub_err_t
@@ -182,11 +152,11 @@
     var = state[SEARCH_SET].arg ? state[SEARCH_SET].arg : "root";
 
   if (state[SEARCH_LABEL].set)
-    search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, 0);
+    search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, SEARCH_LABEL);
   else if (state[SEARCH_FS_UUID].set)
-    search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, 1);
+    search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, SEARCH_FS_UUID);
   else if (state[SEARCH_FILE].set)
-    search_file (args[0], var, state[SEARCH_NO_FLOPPY].set);
+    search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, SEARCH_FILE);
   else
     return grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
 





reply via email to

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