WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] libfsimage: portability fixes for NetBSD

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] libfsimage: portability fixes for NetBSD
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 27 Mar 2008 05:30:21 -0700
Delivery-date: Thu, 27 Mar 2008 05:30:36 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1206542454 0
# Node ID 2c48ed7e303d9b9d35465a5347617ae54642a149
# Parent  b6d15be09aecc41605db2851c59560aa0d7698b0
libfsimage: portability fixes for NetBSD

Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx>
---
 tools/libfsimage/Makefile                |    2 -
 tools/libfsimage/Rules.mk                |    1 
 tools/libfsimage/check-libext2fs         |    6 ++-
 tools/libfsimage/common/fsimage_grub.c   |   54 +++++++++++++++++++++++--------
 tools/libfsimage/common/fsimage_grub.h   |    2 -
 tools/libfsimage/common/fsimage_plugin.c |    5 ++
 6 files changed, 52 insertions(+), 18 deletions(-)

diff -r b6d15be09aec -r 2c48ed7e303d tools/libfsimage/Makefile
--- a/tools/libfsimage/Makefile Wed Mar 26 14:05:36 2008 +0000
+++ b/tools/libfsimage/Makefile Wed Mar 26 14:40:54 2008 +0000
@@ -2,7 +2,7 @@ include $(XEN_ROOT)/tools/Rules.mk
 include $(XEN_ROOT)/tools/Rules.mk
 
 SUBDIRS-y = common ufs reiserfs iso9660 fat
-SUBDIRS-y += $(shell env CC="$(CC)" ./check-libext2fs)
+SUBDIRS-y += $(shell $(SHELL) env CC="$(CC)" ./check-libext2fs)
 
 .PHONY: all clean install
 all clean install: %: subdirs-%
diff -r b6d15be09aec -r 2c48ed7e303d tools/libfsimage/Rules.mk
--- a/tools/libfsimage/Rules.mk Wed Mar 26 14:05:36 2008 +0000
+++ b/tools/libfsimage/Rules.mk Wed Mar 26 14:40:54 2008 +0000
@@ -11,6 +11,7 @@ FSDIR-$(CONFIG_SunOS)-x86_64 = $(PREFIX)
 FSDIR-$(CONFIG_SunOS)-x86_64 = $(PREFIX)/lib/fs/$(FS)/64
 FSDIR-$(CONFIG_SunOS)-x86_32 = $(PREFIX)/lib/fs/$(FS)/
 FSDIR-$(CONFIG_SunOS) = $(FSDIR-$(CONFIG_SunOS)-$(XEN_TARGET_ARCH))
+FSDIR-$(CONFIG_NetBSD) = $(LIBDIR)/fs/$(FS)
 FSDIR = $(FSDIR-y)
 
 FSLIB = fsimage.so
diff -r b6d15be09aec -r 2c48ed7e303d tools/libfsimage/check-libext2fs
--- a/tools/libfsimage/check-libext2fs  Wed Mar 26 14:05:36 2008 +0000
+++ b/tools/libfsimage/check-libext2fs  Wed Mar 26 14:40:54 2008 +0000
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 
 cat >ext2-test.c <<EOF
 #include <ext2fs/ext2fs.h>
@@ -9,7 +9,9 @@ int main()
 }
 EOF
 
-${CC:-gcc} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1
+if test -z ${CC}; then CC="gcc"; fi
+${CC} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1
+
 if [ $? = 0 ]; then
        echo ext2fs-lib
 else
diff -r b6d15be09aec -r 2c48ed7e303d tools/libfsimage/common/fsimage_grub.c
--- a/tools/libfsimage/common/fsimage_grub.c    Wed Mar 26 14:05:36 2008 +0000
+++ b/tools/libfsimage/common/fsimage_grub.c    Wed Mar 26 14:40:54 2008 +0000
@@ -204,19 +204,47 @@ fsig_devread(fsi_file_t *ffi, unsigned i
 fsig_devread(fsi_file_t *ffi, unsigned int sector, unsigned int offset,
     unsigned int bufsize, char *buf)
 {
-       uint64_t off = ffi->ff_fsi->f_off + ((uint64_t)sector * 512) + offset;
-       ssize_t bytes_read = 0;
-
-       while (bufsize) {
-               ssize_t ret = pread(ffi->ff_fsi->f_fd, buf + bytes_read,
-                   bufsize, (off_t)off);
-               if (ret == -1)
-                       return (0);
-               if (ret == 0)
-                       return (0);
-
-               bytes_read += ret;
-               bufsize -= ret;
+       off_t off;
+       ssize_t ret;
+       int n, r;
+       char tmp[SECTOR_SIZE];
+
+       off = ffi->ff_fsi->f_off + ((off_t)sector * SECTOR_SIZE) + offset;
+
+       /*
+        * Make reads from a raw disk sector-aligned. This is a requirement
+        * for NetBSD. Split the read up into to three parts to meet this
+        * requirement.
+        */
+
+       n = (off & (SECTOR_SIZE - 1));
+       if (n > 0) {
+               r = SECTOR_SIZE - n;
+               if (r > bufsize)
+                       r = bufsize;
+               ret = pread(ffi->ff_fsi->f_fd, tmp, SECTOR_SIZE, off - n);
+               if (ret < n + r)
+                       return (0);
+               memcpy(buf, tmp + n, r);
+               buf += r;
+               bufsize -= r;
+               off += r;
+       }
+
+       n = (bufsize & ~(SECTOR_SIZE - 1));
+       if (n > 0) {
+               ret = pread(ffi->ff_fsi->f_fd, buf, n, off);
+               if (ret < n)
+                       return (0);
+               buf += n;
+               bufsize -= n;
+               off += n;
+       }
+       if (bufsize > 0) {
+               ret = pread(ffi->ff_fsi->f_fd, tmp, SECTOR_SIZE, off);
+               if (ret < bufsize)
+                       return (0);
+               memcpy(buf, tmp, bufsize);
        }
 
        return (1);
diff -r b6d15be09aec -r 2c48ed7e303d tools/libfsimage/common/fsimage_grub.h
--- a/tools/libfsimage/common/fsimage_grub.h    Wed Mar 26 14:05:36 2008 +0000
+++ b/tools/libfsimage/common/fsimage_grub.h    Wed Mar 26 14:40:54 2008 +0000
@@ -44,7 +44,7 @@ typedef struct fsig_plugin_ops {
 } fsig_plugin_ops_t;
 
 #define        STAGE1_5
-#define FSYS_BUFLEN 0x8000
+#define FSYS_BUFLEN 0x40000
 #define        SECTOR_BITS 9
 #define        SECTOR_SIZE 0x200
 
diff -r b6d15be09aec -r 2c48ed7e303d tools/libfsimage/common/fsimage_plugin.c
--- a/tools/libfsimage/common/fsimage_plugin.c  Wed Mar 26 14:05:36 2008 +0000
+++ b/tools/libfsimage/common/fsimage_plugin.c  Wed Mar 26 14:40:54 2008 +0000
@@ -131,7 +131,10 @@ static int load_plugins(void)
        int err;
        int ret = -1;
 
-#ifdef __sun__
+#if defined(FSIMAGE_FSDIR)
+       if (fsdir == NULL)
+               fsdir = FSIMAGE_FSDIR;
+#elif defined(__sun__)
        if (fsdir == NULL)
                fsdir = "/usr/lib/fs";
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] libfsimage: portability fixes for NetBSD, Xen patchbot-unstable <=