grub_gpt_part_guid_t *guid;
if (grub_disk_read(disk, p->offset, p->index, sizeof(entry), &entry))
- return grub_errno;
+ {
+ grub_error_push ();
+ grub_disk_close (disk);
+ grub_device_close (dev);
+ grub_error_pop ();
+ return grub_errno;
+ }
guid = &entry.guid;
grub_snprintf (val, sizeof(val),
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
}
fs = grub_fs_probe (dev);
if (! fs)
- return grub_errno;
+ {
+ grub_error_push ();
+ grub_device_close (dev);
+ grub_error_pop ();
+ return grub_errno;
+ }
if (state[3].set)
{
if (state[0].set)
{
char *uuid;
if (! fs->fs_uuid)
- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- N_("%s does not support UUIDs"), fs->name);
+ {
+ grub_device_close (dev);
+ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+ N_("%s does not support UUIDs"), fs->name);
+ }
err = fs->fs_uuid (dev, &uuid);
if (err)
- return err;
+ {
+ grub_device_close (dev);
+ return err;
+ }
if (! uuid)
- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- N_("%s does not support UUIDs"), fs->name);
+ {
+ grub_device_close (dev);
+ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+ N_("%s does not support UUIDs"), fs->name);
+ }
if (state[0].set)
grub_env_set (state[0].arg, uuid);
{
char *label;
if (! fs->fs_label)
- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- N_("filesystem `%s' does not support labels"),
- fs->name);
+ {
+ grub_device_close (dev);
+ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+ N_("filesystem `%s' does not support labels"),
+ fs->name);
+ }
err = fs->fs_label (dev, &label);
if (err)
- return err;
+ {
+ grub_device_close (dev);
+ return err;
+ }
if (! label)
- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- N_("filesystem `%s' does not support labels"),
- fs->name);
+ {
+ grub_device_close (dev);
+ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+ N_("filesystem `%s' does not support labels"),
+ fs->name);
+ }
if (state[0].set)
grub_env_set (state[0].arg, label);