Syncs with trunk

This commit is contained in:
Carles Pina i Estany 2009-11-23 20:50:01 +00:00
commit 2b352daff9
2 changed files with 45 additions and 31 deletions

View file

@ -1,3 +1,13 @@
2009-11-23 Robert Millan <rmh.grub@aybabtu.com>
* util/hostdisk.c: Include `<grub/i18n.h>'.
(find_grub_drive): Use ARRAY_SIZE for map size calculation.
(make_device_name): Rewrite using asprintf.
(convert_system_partition_to_system_disk): Replace 0 with NULL.
(find_system_device): If a device is not found, generate one just
by reusing the OS path name.
(read_device_map): Make it permissible for device.map not to exist.
2009-11-23 Robert Millan <rmh.grub@aybabtu.com> 2009-11-23 Robert Millan <rmh.grub@aybabtu.com>
* script/sh/execute.c: Move from here ... * script/sh/execute.c: Move from here ...

View file

@ -25,6 +25,7 @@
#include <grub/util/misc.h> #include <grub/util/misc.h>
#include <grub/util/hostdisk.h> #include <grub/util/hostdisk.h>
#include <grub/misc.h> #include <grub/misc.h>
#include <grub/i18n.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -127,7 +128,7 @@ find_grub_drive (const char *name)
if (name) if (name)
{ {
for (i = 0; i < sizeof (map) / sizeof (map[0]); i++) for (i = 0; i < ARRAY_SIZE (map); i++)
if (map[i].drive && ! strcmp (map[i].drive, name)) if (map[i].drive && ! strcmp (map[i].drive, name))
return i; return i;
} }
@ -565,7 +566,10 @@ read_device_map (const char *dev_map)
fp = fopen (dev_map, "r"); fp = fopen (dev_map, "r");
if (! fp) if (! fp)
grub_util_error ("Cannot open `%s'", dev_map); {
grub_util_info (_("Cannot open `%s'"), dev_map);
return;
}
while (fgets (buf, sizeof (buf), fp)) while (fgets (buf, sizeof (buf), fp))
{ {
@ -670,34 +674,27 @@ grub_util_biosdisk_fini (void)
static char * static char *
make_device_name (int drive, int dos_part, int bsd_part) make_device_name (int drive, int dos_part, int bsd_part)
{ {
int len = strlen(map[drive].drive); char *ret;
char *p; char *dos_part_str = NULL;
char *bsd_part_str = NULL;
if (dos_part >= 0) if (dos_part >= 0)
{ asprintf (&dos_part_str, ",%d", dos_part + 1);
/* Add in char length of dos_part+1 */
int tmp = dos_part + 1;
len++;
while ((tmp /= 10) != 0)
len++;
}
if (bsd_part >= 0)
len += 2;
/* Length to alloc is: char length of map[drive].drive, plus
* char length of (dos_part+1) or of bsd_part, plus
* 2 for the comma and a null/end of string (\0)
*/
p = xmalloc (len + 2);
sprintf (p, "%s", map[drive].drive);
if (dos_part >= 0)
sprintf (p + strlen (p), ",%d", dos_part + 1);
if (bsd_part >= 0) if (bsd_part >= 0)
sprintf (p + strlen (p), ",%c", bsd_part + 'a'); asprintf (&bsd_part_str, ",%c", dos_part + 'a');
return p; asprintf (&ret, "%s%s%s", map[drive].drive,
dos_part_str ? : "",
bsd_part_str ? : "");
if (dos_part_str)
free (dos_part_str);
if (bsd_part_str)
free (bsd_part_str);
return ret;
} }
static char * static char *
@ -706,7 +703,7 @@ convert_system_partition_to_system_disk (const char *os_dev)
#if defined(__linux__) #if defined(__linux__)
char *path = xmalloc (PATH_MAX); char *path = xmalloc (PATH_MAX);
if (! realpath (os_dev, path)) if (! realpath (os_dev, path))
return 0; return NULL;
if (strncmp ("/dev/", path, 5) == 0) if (strncmp ("/dev/", path, 5) == 0)
{ {
@ -876,22 +873,29 @@ device_is_wholedisk (const char *os_dev)
static int static int
find_system_device (const char *os_dev) find_system_device (const char *os_dev)
{ {
int i; unsigned int i;
char *os_disk; char *os_disk;
os_disk = convert_system_partition_to_system_disk (os_dev); os_disk = convert_system_partition_to_system_disk (os_dev);
if (! os_disk) if (! os_disk)
return -1; return -1;
for (i = 0; i < (int) (sizeof (map) / sizeof (map[0])); i++) for (i = 0; i < ARRAY_SIZE (map); i++)
if (map[i].device && strcmp (map[i].device, os_disk) == 0) if (! map[i].device)
break;
else if (strcmp (map[i].device, os_disk) == 0)
{ {
free (os_disk); free (os_disk);
return i; return i;
} }
free (os_disk); if (i == ARRAY_SIZE (map))
return -1; grub_util_error (_("device count exceeds limit"));
map[i].device = os_disk;
map[i].drive = xstrdup (os_disk);
return i;
} }
char * char *