pkgsrc/sysutils/xentools3/patches/patch-di
hannken fdecb48665 Enable the build of pygrub.
Ok: Manuel Bouyer <bouyer@netbsd.org>
2008-03-03 16:45:27 +00:00

58 lines
1.4 KiB
Text

$NetBSD: patch-di,v 1.1 2008/03/03 16:45:27 hannken Exp $
--- libfsimage/common/fsimage_grub.c.orig 2008-01-31 11:06:54.000000000 +0100
+++ libfsimage/common/fsimage_grub.c 2008-03-01 18:59:27.000000000 +0100
@@ -204,6 +204,45 @@ int
fsig_devread(fsi_file_t *ffi, unsigned int sector, unsigned int offset,
unsigned int bufsize, char *buf)
{
+#ifdef __NetBSD__
+ off_t off;
+ ssize_t ret;
+ int n, r;
+ char tmp[512];
+
+ off = ffi->ff_fsi->f_off + ((off_t)sector * 512) + offset;
+
+ /*
+ * On NetBSD reads from a raw disk must be sector-aligned.
+ * Split the read into up to three parts to meet this requirement.
+ */
+
+ if ((n = (off & 511)) > 0) {
+ if ((r = 512 - n) > bufsize)
+ r = bufsize;
+ if ((ret = pread(ffi->ff_fsi->f_fd, tmp, 512, off - n)) < n + r)
+ return (0);
+ bcopy(tmp + n, buf, r);
+ buf += r;
+ bufsize -= r;
+ off += r;
+ }
+
+ if ((n = (bufsize & ~511)) > 0) {
+ if ((ret = pread(ffi->ff_fsi->f_fd, buf, n, off)) < n)
+ return (0);
+ buf += n;
+ bufsize -= n;
+ off += n;
+ }
+ if (bufsize > 0) {
+ if ((ret = pread(ffi->ff_fsi->f_fd, tmp, 512, off)) < bufsize)
+ return (0);
+ bcopy(tmp, buf, bufsize);
+ }
+
+ return (1);
+#else /* __NetBSD__ */
uint64_t off = ffi->ff_fsi->f_off + ((uint64_t)sector * 512) + offset;
ssize_t bytes_read = 0;
@@ -220,6 +259,7 @@ fsig_devread(fsi_file_t *ffi, unsigned i
}
return (1);
+#endif /* __NetBSD__ */
}
int