From 4668d54f0b418b204990ab9025e01b4b1fb77950 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 24 Oct 2002 03:11:05 +0000
Subject: [PATCH] Add fseeko for NetBSD.

---
 configure         |  5 +++--
 configure.in      |  7 ++++---
 src/include/c.h   |  4 ++--
 src/port/fseeko.c | 20 +++++++++++++++-----
 4 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/configure b/configure
index bc31d4d62e3..325303a1ba9 100755
--- a/configure
+++ b/configure
@@ -10543,9 +10543,10 @@ done
 
 
 
-# BSD/OS has a custom fseeko/ftello built on fsetpos/fgetpos
+# BSD/OS & NetBSD use a custom fseeko/ftello built on fsetpos/fgetpos
 # We override the previous test that said fseeko/ftello didn't exist
-case $host_os in bsdi*)
+# OS tests are also done in include/c.h and port/fseeko.c
+case $host_os in bsdi*|netbsd*)
 ac_cv_func_fseeko=yes
 esac
 
diff --git a/configure.in b/configure.in
index 266a290ab19..783320a1586 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-dnl $Header: /cvsroot/pgsql/configure.in,v 1.215 2002/10/24 03:03:37 momjian Exp $
+dnl $Header: /cvsroot/pgsql/configure.in,v 1.216 2002/10/24 03:11:05 momjian Exp $
 dnl
 dnl Developers, please strive to achieve this order:
 dnl
@@ -837,9 +837,10 @@ fi
 
 AC_REPLACE_FUNCS([fseeko gethostname getrusage inet_aton random srandom strcasecmp strdup strerror strtol strtoul])
 
-# BSD/OS has a custom fseeko/ftello built on fsetpos/fgetpos
+# BSD/OS & NetBSD use a custom fseeko/ftello built on fsetpos/fgetpos
 # We override the previous test that said fseeko/ftello didn't exist
-case $host_os in bsdi*)
+# OS tests are also done in include/c.h and port/fseeko.c
+case $host_os in bsdi*|netbsd*)
 ac_cv_func_fseeko=yes
 esac
 
diff --git a/src/include/c.h b/src/include/c.h
index ba0fb355d25..0bdc2ab32c5 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: c.h,v 1.129 2002/10/23 23:37:47 momjian Exp $
+ * $Id: c.h,v 1.130 2002/10/24 03:11:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -639,7 +639,7 @@ typedef NameData *Name;
 #include <unistd.h>
 #endif
 
-#if defined(bsdi)
+#if defined(bsdi) || defined(netbsd)
 int fseeko(FILE *stream, off_t offset, int whence);
 off_t ftello(FILE *stream);
 #endif
diff --git a/src/port/fseeko.c b/src/port/fseeko.c
index dd4ef324718..ca68e1a272b 100644
--- a/src/port/fseeko.c
+++ b/src/port/fseeko.c
@@ -8,12 +8,12 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/port/fseeko.c,v 1.3 2002/10/23 21:39:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/port/fseeko.c,v 1.4 2002/10/24 03:11:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
-#ifdef __bsdi__
+#if defined(bsdi) || defined(netbsd)
 
 #include <pthread.h>
 #include <stdio.h>
@@ -22,11 +22,11 @@
 #include <errno.h>
 
 /*
- *	On BSD/OS, off_t and fpos_t are the same.  Standards say
- *	off_t is an arithmetic type, but not necessarily integral,
+ *	On BSD/OS and NetBSD, off_t and fpos_t are the same.  Standards
+ *	say off_t is an arithmetic type, but not necessarily integral,
  *	while fpos_t might be neither.
  *
- *	This is thread-safe using flockfile/funlockfile.
+ *	This is thread-safe on BSD/OS using flockfile/funlockfile.
  */
 
 int
@@ -38,13 +38,17 @@ fseeko(FILE *stream, off_t offset, int whence)
 	switch (whence)
 	{
 		case SEEK_CUR:
+#ifdef bsdi
 			flockfile(stream);
+#endif
 			if (fgetpos(stream, &floc) != 0)
 				goto failure;
 			floc += offset;
 			if (fsetpos(stream, &floc) != 0)
 				goto failure;
+#ifdef bsdi
 			flockfile(stream);
+#endif
 			return 0;
 			break;
 		case SEEK_SET:
@@ -53,13 +57,17 @@ fseeko(FILE *stream, off_t offset, int whence)
 			return 0;
 			break;
 		case SEEK_END:
+#ifdef bsdi
 			flockfile(stream);
+#endif
 			if (fstat(fileno(stream), &filestat) != 0)
 				goto failure;
 			floc = filestat.st_size;
 			if (fsetpos(stream, &floc) != 0)
 				goto failure;
+#ifdef bsdi
 			funlockfile(stream);
+#endif
 			return 0;
 			break;
 		default:
@@ -68,7 +76,9 @@ fseeko(FILE *stream, off_t offset, int whence)
 	}
 
 failure:
+#ifdef bsdi
 	funlockfile(stream);
+#endif
 	return -1;
 }
 
-- 
GitLab