* 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.
This commit is contained in:
parent
e8fd80bc3d
commit
43b1c99d53
5 changed files with 92 additions and 11 deletions
20
ChangeLog
20
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>
|
2013-09-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* util/getroot.c (grub_util_biosdisk_is_present): Don't do stat on
|
* util/getroot.c (grub_util_biosdisk_is_present): Don't do stat on
|
||||||
|
|
|
@ -155,7 +155,7 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
|
||||||
|
|
||||||
if (!GRUB_UTIL_FD_IS_VALID(fd))
|
if (!GRUB_UTIL_FD_IS_VALID(fd))
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("cannot open `%s': %s"),
|
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->total_sectors = grub_util_get_fd_size (fd, map[drive].device,
|
||||||
&disk->log_sector_size);
|
&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))
|
if (!GRUB_UTIL_FD_IS_VALID(data->fd))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot open `%s': %s"),
|
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;
|
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)
|
if (grub_util_fd_read (fd, buf, max << disk->log_sector_size)
|
||||||
!= (ssize_t) (max << disk->log_sector_size))
|
!= (ssize_t) (max << disk->log_sector_size))
|
||||||
return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"),
|
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;
|
size -= max;
|
||||||
buf += (max << disk->log_sector_size);
|
buf += (max << disk->log_sector_size);
|
||||||
sector += max;
|
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)
|
if (grub_util_fd_write (fd, buf, max << disk->log_sector_size)
|
||||||
!= (ssize_t) (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"),
|
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;
|
size -= max;
|
||||||
buf += (max << disk->log_sector_size);
|
buf += (max << disk->log_sector_size);
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,4 +166,28 @@ grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
|
||||||
return size;
|
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
|
#endif
|
||||||
|
|
|
@ -204,3 +204,38 @@ grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
|
||||||
grub_util_info ("successful write");
|
grub_util_info ("successful write");
|
||||||
return real_read;
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -29,19 +29,21 @@
|
||||||
typedef HANDLE grub_util_fd_t;
|
typedef HANDLE grub_util_fd_t;
|
||||||
#define GRUB_UTIL_FD_INVALID INVALID_HANDLE_VALUE
|
#define GRUB_UTIL_FD_INVALID INVALID_HANDLE_VALUE
|
||||||
#define GRUB_UTIL_FD_IS_VALID(x) ((x) != GRUB_UTIL_FD_INVALID)
|
#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
|
#else
|
||||||
typedef int grub_util_fd_t;
|
typedef int grub_util_fd_t;
|
||||||
#define GRUB_UTIL_FD_INVALID -1
|
#define GRUB_UTIL_FD_INVALID -1
|
||||||
#define GRUB_UTIL_FD_IS_VALID(x) ((x) >= 0)
|
#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
|
#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_t
|
||||||
grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags,
|
grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags,
|
||||||
grub_disk_addr_t *max);
|
grub_disk_addr_t *max);
|
||||||
|
|
Loading…
Reference in a new issue