[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Search hinting support
From: |
Vladimir 'φ-coder/phcoder' Serbinenko |
Subject: |
[PATCH] Search hinting support |
Date: |
Mon, 28 Dec 2009 14:04:18 +0100 |
User-agent: |
Mozilla-Thunderbird 2.0.0.22 (X11/20091109) |
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
=== modified file 'commands/search.c'
--- commands/search.c 2009-12-25 23:50:59 +0000
+++ commands/search.c 2009-12-28 13:02:23 +0000
@@ -30,7 +30,8 @@
#include <grub/i18n.h>
void
-FUNC_NAME (const char *key, const char *var, int no_floppy)
+FUNC_NAME (const char *key, const char *var, int no_floppy,
+ const char **hints, unsigned nhints)
{
int count = 0;
char *buf = NULL;
@@ -118,22 +119,32 @@
return (found && var);
}
+ auto void try (void);
+ void try (void)
+ {
+ unsigned i;
+ for (i = 0; i < nhints; i++)
+ if (iterate_device (hints[i]))
+ return;
+ grub_device_iterate (iterate_device);
+ }
+
/* First try without autoloading if we're setting variable. */
if (var)
{
saved_autoload = grub_fs_autoload_hook;
grub_fs_autoload_hook = 0;
- grub_device_iterate (iterate_device);
+ try ();
/* Restore autoload hook. */
grub_fs_autoload_hook = saved_autoload;
/* Retry with autoload if nothing found. */
if (grub_errno == GRUB_ERR_NONE && count == 0)
- grub_device_iterate (iterate_device);
+ try ();
}
else
- grub_device_iterate (iterate_device);
+ try ();
grub_free (buf);
@@ -148,7 +159,8 @@
if (argc == 0)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no argument specified");
- FUNC_NAME (args[0], argc == 1 ? 0 : args[1], 0);
+ FUNC_NAME (args[0], argc == 1 ? 0 : args[1], 0, (const char **) (args + 2),
+ argc > 2 ? argc - 2 : 0);
return grub_errno;
}
@@ -165,7 +177,7 @@
{
cmd =
grub_register_command (COMMAND_NAME, grub_cmd_do_search,
- "NAME [VARIABLE]",
+ "NAME [VARIABLE] [HINTS]",
"Search devices by " SEARCH_TARGET "."
" If VARIABLE is specified, "
"the first device found is set to a variable.");
=== modified file 'commands/search_wrap.c'
--- commands/search_wrap.c 2009-12-25 22:06:52 +0000
+++ commands/search_wrap.c 2009-12-28 13:02:23 +0000
@@ -62,11 +62,14 @@
var = state[SEARCH_SET].arg ? state[SEARCH_SET].arg : "root";
if (state[SEARCH_LABEL].set)
- grub_search_label (args[0], var, state[SEARCH_NO_FLOPPY].set);
+ grub_search_label (args[0], var, state[SEARCH_NO_FLOPPY].set,
+ (const char **) (args + 1), argc - 1);
else if (state[SEARCH_FS_UUID].set)
- grub_search_fs_uuid (args[0], var, state[SEARCH_NO_FLOPPY].set);
+ grub_search_fs_uuid (args[0], var, state[SEARCH_NO_FLOPPY].set,
+ (const char **) (args + 1), argc - 1);
else if (state[SEARCH_FILE].set)
- grub_search_fs_file (args[0], var, state[SEARCH_NO_FLOPPY].set);
+ grub_search_fs_file (args[0], var, state[SEARCH_NO_FLOPPY].set,
+ (const char **) (args + 1), argc - 1);
else
return grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
@@ -80,7 +83,7 @@
cmd =
grub_register_extcmd ("search", grub_cmd_search,
GRUB_COMMAND_FLAG_BOTH,
- N_("search [-f|-l|-u|-s|-n] NAME"),
+ N_("[-f|-l|-u|-s|-n] NAME [HINTS]"),
N_("Search devices by file, filesystem label"
" or filesystem UUID."
" If --set is specified, the first device found is"
=== modified file 'include/grub/search.h'
--- include/grub/search.h 2009-11-23 20:15:44 +0000
+++ include/grub/search.h 2009-12-28 13:02:23 +0000
@@ -19,8 +19,11 @@
#ifndef GRUB_SEARCH_HEADER
#define GRUB_SEARCH_HEADER 1
-void grub_search_fs_file (const char *key, const char *var, int no_floppy);
-void grub_search_fs_uuid (const char *key, const char *var, int no_floppy);
-void grub_search_label (const char *key, const char *var, int no_floppy);
+void grub_search_fs_file (const char *key, const char *var, int no_floppy,
+ const char **hints, unsigned nhints);
+void grub_search_fs_uuid (const char *key, const char *var, int no_floppy,
+ const char **hints, unsigned nhints);
+void grub_search_label (const char *key, const char *var, int no_floppy,
+ const char **hints, unsigned nhints);
#endif
signature.asc
Description: OpenPGP digital signature
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Search hinting support,
Vladimir 'φ-coder/phcoder' Serbinenko <=