diff options
Diffstat (limited to 'sys-boot/grub/files/ubuntu-upstream-1.98/956_loopback_root.diff')
-rw-r--r-- | sys-boot/grub/files/ubuntu-upstream-1.98/956_loopback_root.diff | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/sys-boot/grub/files/ubuntu-upstream-1.98/956_loopback_root.diff b/sys-boot/grub/files/ubuntu-upstream-1.98/956_loopback_root.diff deleted file mode 100644 index ce54872e..00000000 --- a/sys-boot/grub/files/ubuntu-upstream-1.98/956_loopback_root.diff +++ /dev/null @@ -1,139 +0,0 @@ -Upstream: http://lists.gnu.org/archive/html/grub-devel/2009-09/msg00210.html -Description: If you set root after running loopback, any attempts to open - files on the loopback device resolve the loopback file name relative to the - *new* root, not the root at the time loopback was invoked, and so the above - recurses until it runs out of stack. This causes problems for Wubi. I think - it's fairly clear that only the root that was in place when you ran - loopback should be relevant to the loopback file name. - -diff -Nur -x '*.orig' -x '*~' grub2-1.97~beta2/disk/loopback.c grub2-1.97~beta2.new/disk/loopback.c ---- grub2-1.97~beta2/disk/loopback.c 2009-06-10 22:04:23.000000000 +0100 -+++ grub2-1.97~beta2.new/disk/loopback.c 2009-09-10 21:42:56.000000000 +0100 -@@ -28,6 +28,7 @@ - { - char *devname; - char *filename; -+ grub_file_t file; - int has_partitions; - struct grub_loopback *next; - }; -@@ -61,6 +62,7 @@ - /* Remove the device from the list. */ - *prev = dev->next; - -+ grub_file_close (dev->file); - grub_free (dev->devname); - grub_free (dev->filename); - grub_free (dev); -@@ -90,9 +92,6 @@ - if (! file) - return grub_errno; - -- /* Close the file, the only reason for opening it is validation. */ -- grub_file_close (file); -- - /* First try to replace the old device. */ - for (newdev = loopback_list; newdev; newdev = newdev->next) - if (grub_strcmp (newdev->devname, args[0]) == 0) -@@ -102,10 +101,12 @@ - { - char *newname = grub_strdup (args[1]); - if (! newname) -- return grub_errno; -+ goto fail; - - grub_free (newdev->filename); - newdev->filename = newname; -+ grub_file_close (newdev->file); -+ newdev->file = file; - - /* Set has_partitions when `--partitions' was used. */ - newdev->has_partitions = state[1].set; -@@ -116,13 +117,13 @@ - /* Unable to replace it, make a new entry. */ - newdev = grub_malloc (sizeof (struct grub_loopback)); - if (! newdev) -- return grub_errno; -+ goto fail; - - newdev->devname = grub_strdup (args[0]); - if (! newdev->devname) - { - grub_free (newdev); -- return grub_errno; -+ goto fail; - } - - newdev->filename = grub_strdup (args[1]); -@@ -130,9 +131,11 @@ - { - grub_free (newdev->devname); - grub_free (newdev); -- return grub_errno; -+ goto fail; - } - -+ newdev->file = file; -+ - /* Set has_partitions when `--partitions' was used. */ - newdev->has_partitions = state[1].set; - -@@ -141,6 +144,10 @@ - loopback_list = newdev; - - return 0; -+ -+fail: -+ grub_file_close (file); -+ return grub_errno; - } - - -@@ -159,7 +166,6 @@ - static grub_err_t - grub_loopback_open (const char *name, grub_disk_t disk) - { -- grub_file_t file; - struct grub_loopback *dev; - - for (dev = loopback_list; dev; dev = dev->next) -@@ -169,29 +175,17 @@ - if (! dev) - return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't open device"); - -- file = grub_file_open (dev->filename); -- if (! file) -- return grub_errno; -- - /* Use the filesize for the disk size, round up to a complete sector. */ -- disk->total_sectors = ((file->size + GRUB_DISK_SECTOR_SIZE - 1) -+ disk->total_sectors = ((dev->file->size + GRUB_DISK_SECTOR_SIZE - 1) - / GRUB_DISK_SECTOR_SIZE); - disk->id = (unsigned long) dev; - - disk->has_partitions = dev->has_partitions; -- disk->data = file; -+ disk->data = dev->file; - - return 0; - } - --static void --grub_loopback_close (grub_disk_t disk) --{ -- grub_file_t file = (grub_file_t) disk->data; -- -- grub_file_close (file); --} -- - static grub_err_t - grub_loopback_read (grub_disk_t disk, grub_disk_addr_t sector, - grub_size_t size, char *buf) -@@ -233,7 +227,6 @@ - .id = GRUB_DISK_DEVICE_LOOPBACK_ID, - .iterate = grub_loopback_iterate, - .open = grub_loopback_open, -- .close = grub_loopback_close, - .read = grub_loopback_read, - .write = grub_loopback_write, - .next = 0 |