]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Use the common size routine in hostfs so we can read disks as well.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 29 Feb 2012 14:23:31 +0000 (15:23 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 29 Feb 2012 14:23:31 +0000 (15:23 +0100)
* grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors): Rename to ..
(grub_util_get_fd_size): ... this. Return size in bytes.
All users updated.
* grub-core/kern/emu/hostfs.c (grub_hostfs_open): Use
grub_util_get_fd_size.

ChangeLog
grub-core/disk/geli.c
grub-core/kern/emu/hostdisk.c
grub-core/kern/emu/hostfs.c
include/grub/emu/hostdisk.h

index 12a76b55142dc9de733e06b73208deaa10d0dfee..d80c7be2ba201479fbe3b5d8672bdd73a70da149 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2012-02-29  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Use the common size routine in hostfs so we can read disks as well.
+
+       * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors): Rename to ..
+       (grub_util_get_fd_size): ... this. Return size in bytes.
+       All users updated.
+       * grub-core/kern/emu/hostfs.c (grub_hostfs_open): Use
+       grub_util_get_fd_size.
+
 2012-02-29  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors) [__APPLE__]:
index 855c12e4cb0f8654fa71b0595b992dfdaffee4fe..3a7929bf9f81a2fce94a55592c51e5fb0e5fdcaa 100644 (file)
@@ -221,7 +221,8 @@ grub_util_get_geli_uuid (const char *dev)
   if (fd < 0)
     return NULL;
 
-  s = grub_util_get_fd_sectors (fd, dev, &log_secsize);
+  s = grub_util_get_fd_size (fd, dev, &log_secsize);
+  s >>= log_secsize;
   grub_util_fd_seek (fd, dev, (s << log_secsize) - 512);
 
   uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1);
index 5b588a652d0a6a6eca151493cdd9dced7ecf2cb3..f099f57f050bf639589be0a775f3c4d023871c8c 100644 (file)
@@ -240,7 +240,7 @@ grub_util_biosdisk_iterate (int (*hook) (const char *name),
 
 #if !defined(__MINGW32__)
 grub_uint64_t
-grub_util_get_fd_sectors (int fd, const char *name, unsigned *log_secsize)
+grub_util_get_fd_size (int fd, const char *name, unsigned *log_secsize)
 {
 # if defined(__NetBSD__)
   struct disklabel label;
@@ -304,16 +304,16 @@ grub_util_get_fd_sectors (int fd, const char *name, unsigned *log_secsize)
       *log_secsize = log_sector_size;
 
 # if defined (__APPLE__)
-    return nr;
+    return nr << log_sector_size;
 # elif defined(__NetBSD__)
-    return label.d_secperunit;
+    return label.d_secperunit << log_sector_size;
 # elif defined (__sun__)
-    return minfo.dki_capacity;
+    return minfo.dki_capacity << log_sector_size;
 # else
     if (nr & ((1 << log_sector_size) - 1))
       grub_util_error ("%s", _("unaligned device size"));
 
-    return (nr >> log_sector_size);
+    return nr;
 # endif
 
  fail:
@@ -329,7 +329,7 @@ grub_util_get_fd_sectors (int fd, const char *name, unsigned *log_secsize)
   if (log_secsize)
    *log_secsize = 9;
 
-  return st.st_size >> 9;
+  return st.st_size;
 }
 #endif
 
@@ -378,8 +378,9 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
       return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("cannot open `%s': %s"),
                         map[drive].device, strerror (errno));
 
-    disk->total_sectors = grub_util_get_fd_sectors (fd, map[drive].device,
-                                                   &disk->log_sector_size);
+    disk->total_sectors = grub_util_get_fd_size (fd, map[drive].device,
+                                                &disk->log_sector_size);
+    disk->total_sectors >>= disk->log_sector_size;
 
 # if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) || defined(__NetBSD__)
     if (fstat (fd, &st) < 0 || ! S_ISCHR (st.st_mode))
index 6c819da81233b2fc857c603e228b542cea9822a3..3cb089c3fe47218239440b45db01a36ab661f548 100644 (file)
@@ -24,6 +24,7 @@
 #include <grub/mm.h>
 #include <grub/dl.h>
 #include <grub/util/misc.h>
+#include <grub/emu/hostdisk.h>
 #include <grub/i18n.h>
 
 #include <dirent.h>
@@ -132,9 +133,7 @@ grub_hostfs_open (struct grub_file *file, const char *name)
 #ifdef __MINGW32__
   file->size = grub_util_get_disk_size (name);
 #else
-  fseeko (f, 0, SEEK_END);
-  file->size = ftello (f);
-  fseeko (f, 0, SEEK_SET);
+  file->size = grub_util_get_fd_size (fileno (f), name, NULL);
 #endif
 
   return GRUB_ERR_NONE;
index 88c20f5c9720496b1dd9f7c9020158a74e91eb2f..f1bfa6e98e85ddeaee60a87977a6754b7c757de2 100644 (file)
@@ -59,7 +59,7 @@ grub_hostdisk_os_dev_to_grub_drive (const char *os_dev, int add);
 
 #if !defined(__MINGW32__)
 grub_uint64_t
-grub_util_get_fd_sectors (int fd, const char *name, unsigned *log_secsize);
+grub_util_get_fd_size (int fd, const char *name, unsigned *log_secsize);
 #endif
 
 char *