Add fseeko/ftello using fsetpos/fgetpos for BSD/OS.

This commit is contained in:
Bruce Momjian 2002-10-23 20:56:24 +00:00
parent 641b658c26
commit dc4d18e056
3 changed files with 86 additions and 3 deletions

6
configure vendored
View file

@ -10463,7 +10463,8 @@ fi
for ac_func in gethostname getrusage inet_aton random srandom strcasecmp strdup strerror strtol strtoul
for ac_func in fseeko gethostname getrusage inet_aton random srandom strcasecmp strdup strerror strtol strtoul
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
@ -11470,6 +11471,9 @@ fi
done
case $host_os in bsdi*)
ac_cv_func_fseeko=yes
esac
echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5
echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6
if test "${ac_cv_sys_largefile_source+set}" = set; then

View file

@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
dnl $Header: /cvsroot/pgsql/configure.in,v 1.211 2002/09/25 13:23:15 momjian Exp $
dnl $Header: /cvsroot/pgsql/configure.in,v 1.212 2002/10/23 20:56:24 momjian Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
@ -835,7 +835,7 @@ else
AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
fi
AC_REPLACE_FUNCS([gethostname getrusage inet_aton random srandom strcasecmp strdup strerror strtol strtoul])
AC_REPLACE_FUNCS([fseeko gethostname getrusage inet_aton random srandom strcasecmp strdup strerror strtol strtoul])
# Solaris has a very slow qsort in certain cases.
case $host_os in
@ -903,6 +903,9 @@ AC_CHECK_FUNCS(atexit, [],
[AC_CHECK_FUNCS(on_exit, [],
[AC_MSG_ERROR([neither atexit() nor on_exit() found])])])
case $host_os in bsdi*)
ac_cv_func_fseeko=yes
esac
AC_FUNC_FSEEKO

76
src/port/fseeko.c Normal file
View file

@ -0,0 +1,76 @@
/*-------------------------------------------------------------------------
*
* fseeko.c
* 64-bit versions of fseeko/ftello()
*
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/port/fseeko.c,v 1.1 2002/10/23 20:56:24 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#ifdef __bsdi__
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#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,
* while fpos_t might be neither.
*
* I don't think this is thread-safe.
*/
int
fseeko(FILE *stream, off_t offset, int whence)
{
off_t floc;
struct stat filestat;
switch (whence)
{
case SEEK_CUR:
if (fgetpos(stream, &floc) != 0)
return -1;
floc += offset;
if (fsetpos(stream, &floc) != 0)
return -1;
return 0;
break;
case SEEK_SET:
if (fsetpos(stream, &offset) != 0)
return -1;
return 0;
break;
case SEEK_END:
if (fstat(fileno(stream), &filestat) != 0)
return -1;
floc = filestat.st_size;
if (fsetpos(stream, &floc) != 0)
return -1;
return 0;
break;
default:
errno = EINVAL;
return -1;
}
}
off_t
ftello(FILE *stream)
{
off_t floc;
if (fgetpos(stream, &floc) != 0)
return -1;
return floc;
}
#endif