Hi,
In testing grub-emu after a merge, I was getting weird behavior whereby a
zfs volume could not be properly read. It was failing because, after a lot of
painful debugging, I discovered that the offsets issued to the underlying host
disk device were wrong, because the grub-emu was not build
largefile-aware on platform on which I was testing. grub-emu should be built
with -DLARGEFILE_SOURCE and _FILE_OFFSET_BITS=64 so that off_t will be defined
as a 64-bit type and calls like lseek will work with large files (and
devices). So, I think a configure test for this for the emu target is
essential. Note that most major platforms in hostdisk.c are covered by their
own #ifdef'ed code -- it's the common case of:
off_t offset = (off_t) sector << GRUB_DISK_SECTOR_BITS;
if (lseek (fd, offset, SEEK_SET) != offset)
{
grub_error (GRUB_ERR_BAD_DEVICE, "cannot seek `%s'",
map[disk->id].device);
close (fd);
return -1;
}
that exposes the problem, since without LARGEFILE_SOURCE and
_FILE_OFFSET_BITS, off_t defaults to a 32-bit quantity.
--S
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel