[2328] 2009-06-16 Vladimir Serbinenko <[email protected]>

Vladimir Serbinenko <[email protected]>
Newsgroups gmane.comp.boot-loaders.grub.cvs
Message-ID <[email protected]>
Revision: 2328
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2328
Author:   phcoder
Date:     2009-06-15 22:41:42 +0000 (Mon, 15 Jun 2009)
Log Message:
-----------
2009-06-16  Vladimir Serbinenko  <[email protected]>

	Probe command

	* commands/probe.c: new file
	* conf/common.rmk (pkglib_MODULES): add probe.mod
	(probe_mod_SOURCES): new variable
	(probe_mod_CFLAGS): likewise
	(probe_mod_LDFLAGS): likewise
	* conf/i386-coreboot.rmk (grub_emu_SOURCES): add commands/probe.c
	* conf/i386-ieee1275.rmk: likewise
	* conf/i386-pc.rmk: likewise
	* conf/powerpc-ieee1275.rmk: likewise
	* conf/sparc64-ieee1275.rmk: likewise

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/conf/common.rmk
    trunk/grub2/conf/i386-coreboot.rmk
    trunk/grub2/conf/i386-ieee1275.rmk
    trunk/grub2/conf/i386-pc.rmk
    trunk/grub2/conf/powerpc-ieee1275.rmk
    trunk/grub2/conf/sparc64-ieee1275.rmk

Added Paths:
-----------
    trunk/grub2/commands/probe.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/ChangeLog	2009-06-15 22:41:42 UTC (rev 2328)
@@ -1,3 +1,18 @@
+2009-06-16  Vladimir Serbinenko  <[email protected]>
+
+	Probe command
+
+	* commands/probe.c: new file
+	* conf/common.rmk (pkglib_MODULES): add probe.mod
+	(probe_mod_SOURCES): new variable
+	(probe_mod_CFLAGS): likewise
+	(probe_mod_LDFLAGS): likewise
+	* conf/i386-coreboot.rmk (grub_emu_SOURCES): add commands/probe.c
+	* conf/i386-ieee1275.rmk: likewise
+	* conf/i386-pc.rmk: likewise
+	* conf/powerpc-ieee1275.rmk: likewise
+	* conf/sparc64-ieee1275.rmk: likewise
+
 2009-06-15  Vladimir Serbinenko  <[email protected]>
 
 	Fix handling of string like \"hello\" and "a

Added: trunk/grub2/commands/probe.c
===================================================================
--- trunk/grub2/commands/probe.c	                        (rev 0)
+++ trunk/grub2/commands/probe.c	2009-06-15 22:41:42 UTC (rev 2328)
@@ -0,0 +1,160 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 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/>.
+ */
+
+#include <grub/types.h>
+#include <grub/misc.h>
+#include <grub/mm.h>
+#include <grub/err.h>
+#include <grub/dl.h>
+#include <grub/device.h>
+#include <grub/disk.h>
+#include <grub/partition.h>
+#include <grub/net.h>
+#include <grub/fs.h>
+#include <grub/file.h>
+#include <grub/misc.h>
+#include <grub/env.h>
+#include <grub/extcmd.h>
+
+static const struct grub_arg_option options[] = 
+  {
+    {"set",             's', GRUB_ARG_OPTION_OPTIONAL,
+     "set a variable to return value", "VAR", ARG_TYPE_STRING},
+    {"driver",		'd', 0, "determine driver", 0, 0},
+    {"partmap",		'p', 0, "determine partion map type", 0, 0},
+    {"fs",		'f', 0, "determine filesystem type", 0, 0},
+    {"fs-uuid",		'u', 0, "determine filesystem UUID", 0, 0},
+    {"label",		'l', 0, "determine filesystem label", 0, 0},
+    {0, 0, 0, 0, 0, 0}
+  };
+
+static grub_err_t
+grub_cmd_probe (grub_extcmd_t cmd, int argc, char **args)
+{
+  struct grub_arg_list *state = cmd->state;
+  grub_device_t dev;
+  grub_fs_t fs;
+  char *ptr;
+  grub_err_t err;
+
+  if (argc < 1)
+    return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required");
+
+  ptr = args[0] + grub_strlen (args[0]) - 1;
+  if (args[0][0] == '(' && *ptr == ')')
+    {
+      *ptr = 0;
+      dev = grub_device_open (args[0] + 1);
+      *ptr = ')';
+    }
+  else
+    dev = grub_device_open (args[0]);
+  if (! dev)
+    return grub_error (GRUB_ERR_BAD_DEVICE, "couldn't open device");
+
+  if (state[1].set)
+    {
+      const char *val = "none";
+      if (dev->net)
+	val = dev->net->dev->name;
+      if (dev->disk)
+	val = dev->disk->dev->name;
+      if (state[0].set)
+	grub_env_set (state[0].arg, val);
+      else
+	grub_printf ("%s", val);
+      return GRUB_ERR_NONE;
+    }
+  if (state[2].set)
+    {
+      const char *val = "none";
+      if (dev->disk && dev->disk->partition)
+	val = dev->disk->partition->partmap->name;
+      if (state[0].set)
+	grub_env_set (state[0].arg, val);
+      else
+	grub_printf ("%s", val);
+      return GRUB_ERR_NONE;
+    }
+  fs = grub_fs_probe (dev);
+  if (! fs)
+    return grub_error (GRUB_ERR_UNKNOWN_FS, "unrecognised fs");
+  if (state[3].set)
+    {
+      if (state[0].set)
+	grub_env_set (state[0].arg, fs->name);
+      else
+	grub_printf ("%s", fs->name);
+      return GRUB_ERR_NONE;
+    }
+  if (state[4].set)
+    {
+      char *uuid;
+      if (! fs->uuid)
+	return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			   "uuid for this FS isn't supported yet");
+      err = fs->uuid (dev, &uuid);
+      if (err)
+	return err;
+      if (! uuid)
+	return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			   "uuid for this FS isn't supported yet");
+
+      if (state[0].set)
+	grub_env_set (state[0].arg, uuid);
+      else
+	grub_printf ("%s", uuid);
+      grub_free (uuid);
+      return GRUB_ERR_NONE;
+    }
+  if (state[5].set)
+    {
+      char *label;
+      if (! fs->label)
+	return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			   "label for this FS isn't supported yet");
+      err = fs->label (dev, &label);
+      if (err)
+	return err;
+      if (! label)
+	return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			   "uuid for this FS isn't supported yet");
+
+      if (state[0].set)
+	grub_env_set (state[0].arg, label);
+      else
+	grub_printf ("%s", label);
+      grub_free (label);
+      return GRUB_ERR_NONE;
+    }
+  return grub_error (GRUB_ERR_BAD_ARGUMENT, "unrecognised target");
+}
+
+static grub_extcmd_t cmd;
+
+GRUB_MOD_INIT (probe)
+{
+  cmd = grub_register_extcmd ("probe", grub_cmd_probe, GRUB_COMMAND_FLAG_BOTH,
+			      "probe [--target=target] [DEVICE]",
+			      "Retrieve device info.", options);
+}
+
+GRUB_MOD_FINI (probe)
+{
+  grub_unregister_extcmd (cmd);
+}

Modified: trunk/grub2/conf/common.rmk
===================================================================
--- trunk/grub2/conf/common.rmk	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/conf/common.rmk	2009-06-15 22:41:42 UTC (rev 2328)
@@ -354,7 +354,7 @@
 	terminfo.mod test.mod blocklist.mod hexdump.mod		\
 	read.mod sleep.mod loadenv.mod crc.mod parttool.mod	\
 	pcpart.mod memrw.mod normal.mod sh.mod lua.mod	\
-	gptsync.mod true.mod
+	gptsync.mod true.mod probe.mod
 
 # For gptsync.mod.
 gptsync_mod_SOURCES = commands/gptsync.c
@@ -486,6 +486,11 @@
 true_mod_CFLAGS = $(COMMON_CFLAGS)
 true_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
+# For probe.mod.
+probe_mod_SOURCES = commands/probe.c
+probe_mod_CFLAGS = $(COMMON_CFLAGS)
+probe_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
 # For normal.mod.
 normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \
 	normal/autofs.c normal/handler.c \
@@ -580,3 +585,4 @@
 bufio_mod_SOURCES = io/bufio.c
 bufio_mod_CFLAGS = $(COMMON_CFLAGS)
 bufio_mod_LDFLAGS = $(COMMON_LDFLAGS)
+

Modified: trunk/grub2/conf/i386-coreboot.rmk
===================================================================
--- trunk/grub2/conf/i386-coreboot.rmk	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/conf/i386-coreboot.rmk	2009-06-15 22:41:42 UTC (rev 2328)
@@ -61,7 +61,7 @@
 	commands/configfile.c commands/echo.c commands/help.c		\
 	commands/handler.c commands/ls.c commands/test.c 		\
 	commands/search.c commands/blocklist.c commands/hexdump.c	\
-	commands/gptsync.c						\
+	commands/gptsync.c commands/probe.c				\
 	lib/hexdump.c commands/i386/cpuid.c				\
 	disk/host.c disk/loopback.c					\
 	\

Modified: trunk/grub2/conf/i386-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/i386-ieee1275.rmk	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/conf/i386-ieee1275.rmk	2009-06-15 22:41:42 UTC (rev 2328)
@@ -61,7 +61,7 @@
 	commands/handler.c commands/ls.c commands/test.c 		\
 	commands/search.c commands/blocklist.c commands/hexdump.c	\
 	lib/hexdump.c commands/halt.c commands/reboot.c			\
-	commands/gptsync.c commands/i386/cpuid.c			\
+	commands/gptsync.c commands/probe.c commands/i386/cpuid.c	\
 	disk/host.c disk/loopback.c					\
 	\
 	fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c			\

Modified: trunk/grub2/conf/i386-pc.rmk
===================================================================
--- trunk/grub2/conf/i386-pc.rmk	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/conf/i386-pc.rmk	2009-06-15 22:41:42 UTC (rev 2328)
@@ -127,7 +127,7 @@
 	commands/handler.c commands/ls.c commands/test.c 		\
 	commands/search.c commands/blocklist.c commands/hexdump.c	\
 	lib/hexdump.c commands/i386/pc/halt.c commands/reboot.c		\
-	commands/gptsync.c commands/i386/cpuid.c			\
+	commands/gptsync.c commands/probe.c commands/i386/cpuid.c	\
 	disk/host.c disk/loopback.c disk/scsi.c				\
 	fs/fshelp.c 	\
 	\

Modified: trunk/grub2/conf/powerpc-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/powerpc-ieee1275.rmk	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/conf/powerpc-ieee1275.rmk	2009-06-15 22:41:42 UTC (rev 2328)
@@ -45,7 +45,7 @@
 	commands/search.c commands/handler.c commands/test.c 		\
 	commands/ls.c commands/blocklist.c commands/hexdump.c		\
 	lib/hexdump.c commands/halt.c commands/reboot.c 		\
-	commands/gptsync.c 			\
+	commands/gptsync.c commands/probe.c 			\
 	disk/loopback.c							\
 	\
 	fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c			\

Modified: trunk/grub2/conf/sparc64-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/sparc64-ieee1275.rmk	2009-06-15 21:09:41 UTC (rev 2327)
+++ trunk/grub2/conf/sparc64-ieee1275.rmk	2009-06-15 22:41:42 UTC (rev 2328)
@@ -101,6 +101,7 @@
 	commands/configfile.c commands/help.c				\
 	commands/search.c commands/handler.c commands/test.c 		\
 	commands/ls.c commands/blocklist.c commands/hexdump.c		\
+	commands/probe.c						\
 	lib/hexdump.c commands/halt.c commands/reboot.c			\
 	disk/loopback.c							\
 	\
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.