Index: configure.ac
===================================================================
RCS file: /cvsroot/global/global/configure.ac,v
retrieving revision 1.57
diff -u -r1.57 configure.ac
--- configure.ac	11 Jul 2005 12:20:25 -0000	1.57
+++ configure.ac	17 Aug 2005 12:38:43 -0000
@@ -100,6 +100,7 @@
 AC_CHECK_FUNCS(getcwd putenv strdup lstat snprintf utimes)
 AC_CHECK_FUNCS(index rindex bzero bcmp bcopy strchr strrchr memset memcmp memmove)
 AC_CHECK_FUNCS(malloc realloc alloca vprintf doprnt strerror strerror_r)
+AC_CHECK_FUNCS(pread pwrite)
 AC_CHECK_DECLS([free, lseek, malloc, memchr, realloc, stpcpy, strstr])
 AG_DJGPP
 
Index: libdb/mpool.c
===================================================================
RCS file: /cvsroot/global/global/libdb/mpool.c,v
retrieving revision 1.4
diff -u -r1.4 mpool.c
--- libdb/mpool.c	16 May 2005 02:41:25 -0000	1.4
+++ libdb/mpool.c	17 Aug 2005 12:38:44 -0000
@@ -213,6 +213,13 @@
 	++mp->pageread;
 #endif
 	off = mp->pagesize * pgno;
+#ifdef HAVE_PREAD
+	if ((nr = pread(mp->fd, bp->page, mp->pagesize, off)) != mp->pagesize) {
+		if (nr >= 0)
+			errno = EFTYPE;
+		return (NULL);
+	}
+#else
 	if (lseek(mp->fd, off, SEEK_SET) != off)
 		return (NULL);
 	if ((nr = read(mp->fd, bp->page, mp->pagesize)) != mp->pagesize) {
@@ -220,6 +227,7 @@
 			errno = EFTYPE;
 		return (NULL);
 	}
+#endif
 
 	/* Set the page number, pin the page. */
 	bp->pgno = pgno;
@@ -388,10 +396,15 @@
 		(mp->pgout)(mp->pgcookie, bp->pgno, bp->page);
 
 	off = mp->pagesize * bp->pgno;
+#ifdef HAVE_PWRITE
+	if (pwrite(mp->fd, bp->page, mp->pagesize, off) != mp->pagesize)
+		return (RET_ERROR);
+#else
 	if (lseek(mp->fd, off, SEEK_SET) != off)
 		return (RET_ERROR);
 	if (write(mp->fd, bp->page, mp->pagesize) != mp->pagesize)
 		return (RET_ERROR);
+#endif
 
 	bp->flags &= ~MPOOL_DIRTY;
 	return (RET_SUCCESS);
