]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Make grub_util_fd_seek match behaviour of other grub_util_fd_* and
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 14 Oct 2013 10:47:09 +0000 (12:47 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 14 Oct 2013 10:47:09 +0000 (12:47 +0200)
fseeko.

ChangeLog
grub-core/disk/cryptodisk.c
grub-core/disk/geli.c
grub-core/kern/emu/hostdisk.c
grub-core/osdep/aros/hostdisk.c
grub-core/osdep/linux/hostdisk.c
grub-core/osdep/unix/hostdisk.c
grub-core/osdep/windows/hostdisk.c
include/grub/emu/hostdisk.h

index b254825c35089465ee715d82b76470c8be36a92b..124de29d117641d51f92a3758e95dd81b0680bcd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-14  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Make grub_util_fd_seek match behaviour of other grub_util_fd_* and
+       fseeko.
+
 2013-10-14  qwertial  <qwertial>
 
        * grub-core/gdb_grub.in: Fix overflow and wrong field.
index 3ca24f979d2264a26a76a4fe6da776a6299e5ad0..0399fa178d0ea1482a40db724860b57620bf90a1 100644 (file)
@@ -560,10 +560,11 @@ grub_cryptodisk_read (grub_disk_t disk, grub_disk_addr_t sector,
 #ifdef GRUB_UTIL
   if (dev->cheat)
     {
-      err = grub_util_fd_seek (dev->cheat_fd, dev->cheat,
-                              sector << disk->log_sector_size);
-      if (err)
-       return err;
+      int r;
+      r = grub_util_fd_seek (dev->cheat_fd, sector << disk->log_sector_size);
+      if (r)
+       return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
+                          dev->cheat, grub_util_fd_strerror ());
       if (grub_util_fd_read (dev->cheat_fd, buf, size << disk->log_sector_size)
          != (ssize_t) (size << disk->log_sector_size))
        return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"),
@@ -604,10 +605,11 @@ grub_cryptodisk_write (grub_disk_t disk, grub_disk_addr_t sector,
 #ifdef GRUB_UTIL
   if (dev->cheat)
     {
-      err = grub_util_fd_seek (dev->cheat_fd, dev->cheat,
-                              sector << disk->log_sector_size);
-      if (err)
-       return err;
+      int r;
+      r = grub_util_fd_seek (dev->cheat_fd, sector << disk->log_sector_size);
+      if (r)
+       return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
+                          dev->cheat, grub_util_fd_strerror ());
       if (grub_util_fd_write (dev->cheat_fd, buf, size << disk->log_sector_size)
          != (ssize_t) (size << disk->log_sector_size))
        return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"),
index 6cf9a1eecd41429d69fc9fab289433462648157f..3e029402ad4d7bc4fd92c408cd1ee1fdfb71bd52 100644 (file)
@@ -223,7 +223,7 @@ grub_util_get_geli_uuid (const char *dev)
 
   s = grub_util_get_fd_size (fd, dev, &log_secsize);
   s >>= log_secsize;
-  grub_util_fd_seek (fd, dev, (s << log_secsize) - 512);
+  grub_util_fd_seek (fd, (s << log_secsize) - 512);
 
   uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1);
   if (grub_util_fd_read (fd, (void *) &hdr, 512) < 0)
index 2b7f37e86f5529792aaeb4dabd437bae00cc2e2d..d5bc6099bce2d5a82598c4e14dc5daea4d3209d0 100644 (file)
@@ -268,10 +268,12 @@ grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int f
       return GRUB_UTIL_FD_INVALID;
     }
 
-  if (grub_util_fd_seek (fd, map[disk->id].device,
-                        sector << disk->log_sector_size))
+  if (grub_util_fd_seek (fd, sector << disk->log_sector_size))
     {
       grub_util_fd_close (fd);
+      grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
+                 map[disk->id].device, grub_util_fd_strerror ());
+
       return GRUB_UTIL_FD_INVALID;
     }
 
index 1724c7e44f4b7d6219906511e5acfb7cc1ce802e..a9fa9d06bfb37836390c61d10e6f007d8ab00a7a 100644 (file)
@@ -139,15 +139,14 @@ grub_util_get_fd_size_file (grub_util_fd_t fd,
   return ro;
 }
 
-grub_err_t
-grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t off)
+int
+grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
 {
   switch (fd->type)
     {
     case GRUB_UTIL_FD_FILE:
       if (lseek (fd->fd, 0, SEEK_SET) == (off_t) -1)
-       return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
-                          name, strerror (errno));
+       return -1;
       fd->off = off;
       return 0;
     case GRUB_UTIL_FD_DISK:
@@ -155,7 +154,7 @@ grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t off)
       return 0;
     }
 
-  return 0;
+  return -1;
 }
 
 grub_util_fd_t
index 1df3e152138031221923ac3f63a50bfa7742b952..a2c80f39d08b86875e6febbbc6617c745a34043e 100644 (file)
@@ -351,10 +351,11 @@ grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int f
       }
   }
 
-  if (grub_util_fd_seek (fd, grub_util_biosdisk_get_osdev (disk),
-                        sector << disk->log_sector_size))
+  if (grub_util_fd_seek (fd, sector << disk->log_sector_size))
     {
       close (fd);
+      grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
+                 grub_util_biosdisk_get_osdev (disk), strerror (errno));
       return -1;
     }
 
index 81e02aef2726b50559b7901a54032f34df9107d7..b222629d2a9bc3d0f1d86340d34d64497dfb1fd4 100644 (file)
@@ -82,8 +82,8 @@ grub_util_get_fd_size (grub_util_fd_t fd, const char *name, unsigned *log_secsiz
 #if defined(__linux__) && (!defined(__GLIBC__) || \
         ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
   /* Maybe libc doesn't have large file support.  */
-grub_err_t
-grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t off)
+int
+grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
 {
   loff_t offset, result;
   static int _llseek (uint filedes, ulong hi, ulong lo,
@@ -93,19 +93,18 @@ grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t off)
 
   offset = (loff_t) off;
   if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
-    return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
-                      name, strerror (errno));
+    return -1;
   return GRUB_ERR_NONE;
 }
 #else
-grub_err_t
-grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t off)
+int
+grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
 {
   off_t offset = (off_t) off;
 
   if (lseek (fd, offset, SEEK_SET) != offset)
-    return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
-                      name, strerror (errno));
+    return -1;
+
   return 0;
 }
 #endif
index 245f91ca93223298c9fb1fb8041052dee0721879..3e91d7d97b0fd656390024e431f6ba973a09b7e3 100644 (file)
@@ -179,15 +179,14 @@ grub_hostdisk_flush_initial_buffer (const char *os_dev __attribute__ ((unused)))
 {
 }
 
-grub_err_t
-grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t off)
+int
+grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
 {
   LARGE_INTEGER offset;
   offset.QuadPart = off;
 
   if (!SetFilePointerEx (fd, offset, NULL, FILE_BEGIN))
-    return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"),
-                      name, strerror (errno));
+    return -1;
   return 0;
 }
 
index 6f13c95e3021ebf303638010fde00ba85e1ed765..fd319b0d12828a2574ec923dd233942dcdb92d8b 100644 (file)
@@ -47,8 +47,8 @@ int grub_util_biosdisk_is_floppy (grub_disk_t disk);
 const char *
 grub_util_biosdisk_get_compatibility_hint (grub_disk_t disk);
 grub_err_t grub_util_biosdisk_flush (struct grub_disk *disk);
-grub_err_t
-grub_util_fd_seek (grub_util_fd_t fd, const char *name, grub_uint64_t sector);
+int
+grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t offset);
 ssize_t grub_util_fd_read (grub_util_fd_t fd, char *buf, size_t len);
 ssize_t grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len);
 grub_err_t