]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* include/grub/file.h (GRUB_FILE_SIZE_UNKNOWN): New definition.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 5 Sep 2010 15:01:16 +0000 (17:01 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 5 Sep 2010 15:01:16 +0000 (17:01 +0200)
* grub-core/disk/loopback.c (grub_loopback_open): Handle unknown file
size.

ChangeLog
grub-core/disk/loopback.c
include/grub/file.h

index 416b660c031c3c4ebd4ee1f85f58fdeec48cd290..93fedc01484107f9e3a369c520efa33a32e640e0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-05  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * include/grub/file.h (GRUB_FILE_SIZE_UNKNOWN): New definition.
+       * grub-core/disk/loopback.c (grub_loopback_open): Handle unknown file
+       size.
+
 2010-09-05  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * include/grub/err.h (grub_err_t): Replace GRUB_ERR_BAD_GZIP_DATA with
index 8153478ed594250b1ee32aca78167eb980528ba7..878369e5f1a7a1376cbcbb15bbe3de2c858bf3e5 100644 (file)
@@ -167,8 +167,11 @@ grub_loopback_open (const char *name, grub_disk_t disk)
     return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
 
   /* Use the filesize for the disk size, round up to a complete sector.  */
-  disk->total_sectors = ((dev->file->size + GRUB_DISK_SECTOR_SIZE - 1)
-                        / GRUB_DISK_SECTOR_SIZE);
+  if (dev->file->size != GRUB_FILE_SIZE_UNKNOWN)
+    disk->total_sectors = ((dev->file->size + GRUB_DISK_SECTOR_SIZE - 1)
+                          / GRUB_DISK_SECTOR_SIZE);
+  else
+    disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN;
   disk->id = (unsigned long) dev;
 
   disk->has_partitions = dev->has_partitions;
index a9f9552da78b92ca38c82ac379554cb364afef41..0986c98b8fcf7f2676de5647cfcc2f59c9150675 100644 (file)
@@ -104,6 +104,9 @@ grub_ssize_t EXPORT_FUNC(grub_file_read) (grub_file_t file, void *buf,
 grub_off_t EXPORT_FUNC(grub_file_seek) (grub_file_t file, grub_off_t offset);
 grub_err_t EXPORT_FUNC(grub_file_close) (grub_file_t file);
 
+/* Return value of grub_file_size() in case file size is unknown. */
+#define GRUB_FILE_SIZE_UNKNOWN  0xffffffffffffffffULL
+
 static inline grub_off_t
 grub_file_size (const grub_file_t file)
 {