]> git.proxmox.com Git - grub2.git/commitdiff
missed files
authorphcoder <phcoder@debian.bg45.phnet>
Tue, 22 Sep 2009 07:29:32 +0000 (09:29 +0200)
committerphcoder <phcoder@debian.bg45.phnet>
Tue, 22 Sep 2009 07:29:32 +0000 (09:29 +0200)
commands/search_file.c [new file with mode: 0644]
commands/search_label.c [new file with mode: 0644]
commands/search_uuid.c [new file with mode: 0644]
commands/search_wrap.c [new file with mode: 0644]

diff --git a/commands/search_file.c b/commands/search_file.c
new file mode 100644 (file)
index 0000000..2652200
--- /dev/null
@@ -0,0 +1,5 @@
+#define DO_SEARCH_FILE 1
+#define FUNC_NAME grub_search_fs_file
+#define COMMAND_NAME "search.file"
+#define SEARCH_TARGET "file"
+#include "search.c"
diff --git a/commands/search_label.c b/commands/search_label.c
new file mode 100644 (file)
index 0000000..0047b0e
--- /dev/null
@@ -0,0 +1,5 @@
+#define DO_SEARCH_FS_LABEL 1
+#define FUNC_NAME grub_search_label
+#define COMMAND_NAME "search.fs_label"
+#define SEARCH_TARGET "filesystem label"
+#include "search.c"
diff --git a/commands/search_uuid.c b/commands/search_uuid.c
new file mode 100644 (file)
index 0000000..9767d65
--- /dev/null
@@ -0,0 +1,5 @@
+#define DO_SEARCH_FS_UUID 1
+#define FUNC_NAME grub_search_fs_uuid
+#define COMMAND_NAME "search.fs_uuid"
+#define SEARCH_TARGET "filesystem UUID"
+#include "search.c"
diff --git a/commands/search_wrap.c b/commands/search_wrap.c
new file mode 100644 (file)
index 0000000..35cce3f
--- /dev/null
@@ -0,0 +1,81 @@
+/* search.c - search devices based on a file or a filesystem label */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  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
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+static const struct grub_arg_option options[] =
+  {
+    {"file",           'f', 0, "search devices by a file", 0, 0},
+    {"label",          'l', 0, "search devices by a filesystem label", 0, 0},
+    {"fs-uuid",                'u', 0, "search devices by a filesystem UUID", 0, 0},
+    {"set",            's', GRUB_ARG_OPTION_OPTIONAL, "set a variable to the first device found", "VAR", ARG_TYPE_STRING},
+    {"no-floppy",      'n', 0, "do not probe any floppy drive", 0, 0},
+    {0, 0, 0, 0, 0, 0}
+  };
+
+enum options
+  {
+    SEARCH_FILE,
+    SEARCH_LABEL,
+    SEARCH_FS_UUID,
+    SEARCH_SET,
+    SEARCH_NO_FLOPPY,
+ };
+
+static grub_err_t
+grub_cmd_search (grub_extcmd_t cmd, int argc, char **args)
+{
+  struct grub_arg_list *state = cmd->state;
+  const char *var = 0;
+
+  if (argc == 0)
+    return grub_error (GRUB_ERR_BAD_ARGUMENT, "no argument specified");
+
+  if (state[SEARCH_SET].set)
+    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);
+  else if (state[SEARCH_FS_UUID].set)
+    grub_search_fs_uuid (args[0], var, state[SEARCH_NO_FLOPPY].set);
+  else if (state[SEARCH_FILE].set)
+    grub_search_fs_file (args[0], var, state[SEARCH_NO_FLOPPY].set);
+  else
+    return grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
+
+  return grub_errno;
+}
+
+static grub_extcmd_t cmd;
+
+GRUB_MOD_INIT(search)
+{
+  cmd =
+    grub_register_extcmd ("search", grub_cmd_search,
+                         GRUB_COMMAND_FLAG_BOTH,
+                         "search [-f|-l|-u|-s|-n] NAME",
+                         "Search devices by file, filesystem label or filesystem UUID."
+                         " If --set is specified, the first device found is"
+                         " set to a variable. If no variable name is"
+                         " specified, \"root\" is used.",
+                         options);
+}
+
+GRUB_MOD_FINI(search)
+{
+  grub_unregister_extcmd (cmd);
+}