2009-07-13 Pavel Roskin <proski@gnu.org>

* kern/device.c (grub_device_iterate): Change struct part_ent to
	hold the name, not a pointer to it.  Use one grub_malloc() per
	partition, not two.  Free partition_name if grub_malloc() fails.
	Set ents to NULL only before grub_partition_iterate() is called.
This commit is contained in:
proski 2009-07-13 22:21:49 +00:00
parent 75c59f59e7
commit 2df32b2c4a
2 changed files with 12 additions and 11 deletions

View file

@ -1,3 +1,10 @@
2009-07-13 Pavel Roskin <proski@gnu.org>
* kern/device.c (grub_device_iterate): Change struct part_ent to
hold the name, not a pointer to it. Use one grub_malloc() per
partition, not two. Free partition_name if grub_malloc() fails.
Set ents to NULL only before grub_partition_iterate() is called.
2009-07-11 Bean <bean123ch@gmail.com>
* kern/ieee1275/openfw.c (grub_children_iterate): Fix size of

View file

@ -86,8 +86,8 @@ grub_device_iterate (int (*hook) (const char *name))
struct part_ent
{
struct part_ent *next;
char *name;
} *ents = NULL;
char name[0];
} *ents;
int iterate_disk (const char *disk_name)
{
@ -105,18 +105,17 @@ grub_device_iterate (int (*hook) (const char *name))
struct part_ent *p;
int ret = 0;
ents = NULL;
(void) grub_partition_iterate (dev->disk, iterate_partition);
grub_device_close (dev);
p = ents;
ents = NULL;
while (p != NULL)
{
struct part_ent *next = p->next;
if (!ret)
ret = hook (p->name);
grub_free (p->name);
grub_free (p);
p = next;
}
@ -137,15 +136,10 @@ grub_device_iterate (int (*hook) (const char *name))
if (! partition_name)
return 1;
p = grub_malloc (sizeof (*p));
p = grub_malloc (sizeof (p->next) + grub_strlen (disk->name) + 1 +
grub_strlen (partition_name) + 1);
if (!p)
return 1;
p->name = grub_malloc (grub_strlen (disk->name) + 1
+ grub_strlen (partition_name) + 1);
if (! p->name)
{
grub_free (p);
grub_free (partition_name);
return 1;
}