[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[2245] 2009-06-04 Vladimir Serbinenko <address@hidden>
From: |
Vladimir Serbinenko |
Subject: |
[2245] 2009-06-04 Vladimir Serbinenko <address@hidden> |
Date: |
Thu, 04 Jun 2009 16:56:30 +0000 |
Revision: 2245
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2245
Author: phcoder
Date: 2009-06-04 16:56:29 +0000 (Thu, 04 Jun 2009)
Log Message:
-----------
2009-06-04 Vladimir Serbinenko <address@hidden>
Avoid calling biosdisk in drivemap
* commands/i386/pc/drivemap.c (parse_biosdisk): remove
(revparse_biosdisk): likewise
(list_mappings): derive name from id directly
(grub_cmd_drivemap): use tryparse_diskstring
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/commands/i386/pc/drivemap.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2009-06-04 16:18:35 UTC (rev 2244)
+++ trunk/grub2/ChangeLog 2009-06-04 16:56:29 UTC (rev 2245)
@@ -1,5 +1,14 @@
2009-06-04 Vladimir Serbinenko <address@hidden>
+ Avoid calling biosdisk in drivemap
+
+ * commands/i386/pc/drivemap.c (parse_biosdisk): remove
+ (revparse_biosdisk): likewise
+ (list_mappings): derive name from id directly
+ (grub_cmd_drivemap): use tryparse_diskstring
+
+2009-06-04 Vladimir Serbinenko <address@hidden>
+
Script fixes
* include/grub/script_sh.h (grub_script_cmdline): remove cmdline
Modified: trunk/grub2/commands/i386/pc/drivemap.c
===================================================================
--- trunk/grub2/commands/i386/pc/drivemap.c 2009-06-04 16:18:35 UTC (rev
2244)
+++ trunk/grub2/commands/i386/pc/drivemap.c 2009-06-04 16:56:29 UTC (rev
2245)
@@ -143,62 +143,6 @@
}
}
-/* Given a device name, resolves its BIOS disk number and stores it in the
- passed location, which should only be trusted if ERR_NONE is returned. */
-static grub_err_t
-parse_biosdisk (const char *name, grub_uint8_t *disknum)
-{
- grub_disk_t disk;
- /* Skip the first ( in (hd0) - disk_open wants just the name. */
- if (*name == '(')
- name++;
-
- disk = grub_disk_open (name);
- if (! disk)
- return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown device \"%s\"",
- name);
- const enum grub_disk_dev_id id = disk->dev->id;
- /* The following assignment is only sound if the device is indeed a
- biosdisk. The caller must check the return value. */
- if (disknum)
- *disknum = disk->id;
- grub_disk_close (disk);
- if (id != GRUB_DISK_DEVICE_BIOSDISK_ID)
- return grub_error (GRUB_ERR_BAD_DEVICE, "%s is not a BIOS disk", name);
- return GRUB_ERR_NONE;
-}
-
-/* Given a BIOS disk number, returns its GRUB device name if it exists.
- If the call succeeds, the resulting device string must be freed.
- For nonexisting BIOS disk numbers, this function returns
- GRUB_ERR_UNKNOWN_DEVICE. */
-static grub_err_t
-revparse_biosdisk (const grub_uint8_t dnum, const char **output)
-{
- int found = 0;
- auto int find (const char *name);
- int find (const char *name)
- {
- const grub_disk_t disk = grub_disk_open (name);
- if (! disk)
- return 0;
- if (disk->id == dnum && disk->dev->id == GRUB_DISK_DEVICE_BIOSDISK_ID)
- {
- found = 1;
- if (output)
- *output = grub_strdup (name);
- }
- grub_disk_close (disk);
- return found;
- }
-
- grub_disk_dev_iterate (find);
- if (found)
- return GRUB_ERR_NONE;
- return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "BIOS disk %02x not found",
- dnum);
-}
-
/* Given a GRUB-like device name and a convenient location, stores the
related BIOS disk number. Accepts devices like \((f|h)dN\), with
0 <= N < 128. */
@@ -238,15 +182,13 @@
drivemap_node_t *curnode = map_head;
while (curnode)
{
- const char *dname = 0;
- grub_err_t err = revparse_biosdisk (curnode->redirto, &dname);
- if (err != GRUB_ERR_NONE)
- return err;
- grub_printf ("%cD #%-3u (0x%02x) %s\n",
+ grub_printf ("%cD #%-3u (0x%02x) %cd%d\n",
(curnode->newdrive & 0x80) ? 'H' : 'F',
- curnode->newdrive & 0x7F, curnode->newdrive, dname);
+ curnode->newdrive & 0x7F, curnode->newdrive,
+ (curnode->redirto & 0x80) ? 'h' : 'f',
+ curnode->redirto & 0x7F
+ );
curnode = curnode->next;
- grub_free ((char *) dname);
}
return GRUB_ERR_NONE;
}
@@ -286,17 +228,11 @@
if (argc != 2)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "two arguments required");
- err = parse_biosdisk (args[0], &mapfrom);
+ err = tryparse_diskstring (args[0], &mapfrom);
if (err != GRUB_ERR_NONE)
return err;
- /* When swapping we require both devices to be BIOS disks, but when
- performing direct mappings we only require the 2nd argument to look
- like a BIOS disk in order to resolve it into a BIOS disk number. */
- if (cmd->state[OPTIDX_SWAP].set)
- err = parse_biosdisk (args[1], &mapto);
- else
- err = tryparse_diskstring (args[1], &mapto);
+ err = tryparse_diskstring (args[1], &mapto);
if (err != GRUB_ERR_NONE)
return err;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2245] 2009-06-04 Vladimir Serbinenko <address@hidden>,
Vladimir Serbinenko <=