]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_open): Use
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 24 Sep 2013 17:08:34 +0000 (19:08 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 24 Sep 2013 17:08:34 +0000 (19:08 +0200)
grub_util_fd_strerror when using grub_util_fd_*.
(grub_util_fd_open_device): Likewise.
(grub_util_biosdisk_read): Likewise.
(grub_util_biosdisk_write): Likewise.
* grub-core/kern/emu/hostdisk_unix.c (grub_util_fd_open): New function.
(grub_util_fd_strerror): Likewise.
(grub_util_fd_sync): Likewise.
(grub_util_fd_close): Likewise.
* grub-core/kern/emu/hostdisk_windows.c (grub_util_fd_sync): Likewise.
(grub_util_fd_close): Likewise.
(grub_util_fd_strerror): Likewise.
* include/grub/emu/hostdisk.h (grub_util_fd_close): Make into real
function proto rather than macro.
(grub_util_fd_sync): Likewise.
(grub_util_fd_open): Likewise.
(grub_util_fd_strerror): New proto.

ChangeLog
grub-core/kern/emu/hostdisk.c
grub-core/kern/emu/hostdisk_unix.c
grub-core/kern/emu/hostdisk_windows.c
include/grub/emu/hostdisk.h

index 20cfe740a6d66289db9b8530b5bc393a1b1509fe..ec4e1d67f8e1cc98686ffd20cdabf90cd5165fb6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2013-09-24  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_open): Use
+       grub_util_fd_strerror when using grub_util_fd_*.
+       (grub_util_fd_open_device): Likewise.
+       (grub_util_biosdisk_read): Likewise.
+       (grub_util_biosdisk_write): Likewise.
+       * grub-core/kern/emu/hostdisk_unix.c (grub_util_fd_open): New function.
+       (grub_util_fd_strerror): Likewise.
+       (grub_util_fd_sync): Likewise.
+       (grub_util_fd_close): Likewise.
+       * grub-core/kern/emu/hostdisk_windows.c (grub_util_fd_sync): Likewise.
+       (grub_util_fd_close): Likewise.
+       (grub_util_fd_strerror): Likewise.
+       * include/grub/emu/hostdisk.h (grub_util_fd_close): Make into real
+       function proto rather than macro.
+       (grub_util_fd_sync): Likewise.
+       (grub_util_fd_open): Likewise.
+       (grub_util_fd_strerror): New proto.
+
 2013-09-24  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * util/getroot.c (grub_util_biosdisk_is_present): Don't do stat on
index 60e9344d18d0fac2b586db2724d3c4f79585d3b3..c1bd25619aa625cfda7e48970c95f75f03abc7bc 100644 (file)
@@ -155,7 +155,7 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
 
     if (!GRUB_UTIL_FD_IS_VALID(fd))
       return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("cannot open `%s': %s"),
-                        map[drive].device, strerror (errno));
+                        map[drive].device, grub_util_fd_strerror ());
 
     disk->total_sectors = grub_util_get_fd_size (fd, map[drive].device,
                                                 &disk->log_sector_size);
@@ -308,7 +308,7 @@ grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int f
   if (!GRUB_UTIL_FD_IS_VALID(data->fd))
     {
       grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot open `%s': %s"),
-                 map[disk->id].device, strerror (errno));
+                 map[disk->id].device, grub_util_fd_strerror ());
       return GRUB_UTIL_FD_INVALID;
     }
 
@@ -353,7 +353,7 @@ grub_util_biosdisk_read (grub_disk_t disk, grub_disk_addr_t sector,
       if (grub_util_fd_read (fd, buf, max << disk->log_sector_size)
          != (ssize_t) (max << disk->log_sector_size))
        return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"),
-                          map[disk->id].device, strerror (errno));
+                          map[disk->id].device, grub_util_fd_strerror ());
       size -= max;
       buf += (max << disk->log_sector_size);
       sector += max;
@@ -388,7 +388,7 @@ grub_util_biosdisk_write (grub_disk_t disk, grub_disk_addr_t sector,
       if (grub_util_fd_write (fd, buf, max << disk->log_sector_size)
          != (ssize_t) (max << disk->log_sector_size))
        return grub_error (GRUB_ERR_WRITE_ERROR, N_("cannot write to `%s': %s"),
-                          map[disk->id].device, strerror (errno));
+                          map[disk->id].device, grub_util_fd_strerror ());
       size -= max;
       buf += (max << disk->log_sector_size);
     }
index fcadbe355d71f0bd671ce3cc2698a1c9acebc0da..e02256e82102398ecb2403a45fe2d210757fdfa8 100644 (file)
@@ -166,4 +166,28 @@ grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
   return size;
 }
 
+grub_util_fd_t
+grub_util_fd_open (const char *os_dev, int flags)
+{
+  return open (os_dev, flags);
+}
+
+const char *
+grub_util_fd_strerror (void)
+{
+  return strerror (errno);
+}
+
+void
+grub_util_fd_sync (grub_util_fd_t fd)
+{
+  fsync (fd);
+}
+
+void
+grub_util_fd_close (grub_util_fd_t fd)
+{
+  close (fd);
+}
+
 #endif
index a197c2d0896c1b64a0bc4efeffe032164b6acd3d..39f944936c6501b2fdc1e172e5ec9d687e8da8a1 100644 (file)
@@ -204,3 +204,38 @@ grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
   grub_util_info ("successful write");
   return real_read;
 }
+
+void
+grub_util_fd_sync (grub_util_fd_t fd)
+{
+  FlushFileBuffers (fd);
+}
+
+void
+grub_util_fd_close (grub_util_fd_t fd)
+{
+  CloseHandle (fd);
+}
+
+const char *
+grub_util_fd_strerror (void)
+{
+  DWORD err;
+  static TCHAR tbuf[1024];
+  err = GetLastError ();
+  FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM |
+                FORMAT_MESSAGE_IGNORE_INSERTS,
+                NULL, err,
+                MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+                tbuf, ARRAY_SIZE (tbuf), NULL);
+
+#if SIZEOF_TCHAR == 1
+  return (char *) tbuf;
+#elif SIZEOF_TCHAR == 2
+  static grub_uint8_t buf[ARRAY_SIZE (tbuf) * GRUB_MAX_UTF8_PER_UTF16 + 1];
+  *grub_utf16_to_utf8 (buf, tbuf, ARRAY_SIZE (tbuf)) = '\0';
+  return (char *) buf;
+#else
+#error "Unsupported TCHAR size"
+#endif
+}
index ef27c6d7a02ebcc4f4f2c40f827999b0fd954b41..ab438667a8e04e8e7db12f38e6b78cb30957166c 100644 (file)
 typedef HANDLE grub_util_fd_t;
 #define GRUB_UTIL_FD_INVALID INVALID_HANDLE_VALUE
 #define GRUB_UTIL_FD_IS_VALID(x) ((x) != GRUB_UTIL_FD_INVALID)
-#define grub_util_fd_close(x) CloseHandle(x)
-#define grub_util_fd_sync(x) FlushFileBuffers(x)
-grub_util_fd_t
-grub_util_fd_open (const char *os_dev, int flags);
 #else
 typedef int grub_util_fd_t;
 #define GRUB_UTIL_FD_INVALID -1
 #define GRUB_UTIL_FD_IS_VALID(x) ((x) >= 0)
-#define grub_util_fd_close(x) close(x)
-#define grub_util_fd_sync(x) fsync(x)
-#define grub_util_fd_open(x,y) open(x,y)
 #endif
 
+grub_util_fd_t
+grub_util_fd_open (const char *os_dev, int flags);
+const char *
+grub_util_fd_strerror (void);
+void
+grub_util_fd_sync (grub_util_fd_t fd);
+void
+grub_util_fd_close (grub_util_fd_t fd);
+
 grub_util_fd_t
 grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags,
                          grub_disk_addr_t *max);