mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Add fseeko/ftello using fsetpos/fgetpos for BSD/OS.
This commit is contained in:
6
configure
vendored
6
configure
vendored
@ -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
|
do
|
||||||
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
echo "$as_me:$LINENO: checking for $ac_func" >&5
|
echo "$as_me:$LINENO: checking for $ac_func" >&5
|
||||||
@ -11470,6 +11471,9 @@ fi
|
|||||||
done
|
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 "$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
|
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
|
if test "${ac_cv_sys_largefile_source+set}" = set; then
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
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
|
||||||
dnl Developers, please strive to achieve this order:
|
dnl Developers, please strive to achieve this order:
|
||||||
dnl
|
dnl
|
||||||
@ -835,7 +835,7 @@ else
|
|||||||
AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
|
AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
|
||||||
fi
|
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.
|
# Solaris has a very slow qsort in certain cases.
|
||||||
case $host_os in
|
case $host_os in
|
||||||
@ -903,6 +903,9 @@ AC_CHECK_FUNCS(atexit, [],
|
|||||||
[AC_CHECK_FUNCS(on_exit, [],
|
[AC_CHECK_FUNCS(on_exit, [],
|
||||||
[AC_MSG_ERROR([neither atexit() nor on_exit() found])])])
|
[AC_MSG_ERROR([neither atexit() nor on_exit() found])])])
|
||||||
|
|
||||||
|
case $host_os in bsdi*)
|
||||||
|
ac_cv_func_fseeko=yes
|
||||||
|
esac
|
||||||
AC_FUNC_FSEEKO
|
AC_FUNC_FSEEKO
|
||||||
|
|
||||||
|
|
||||||
|
76
src/port/fseeko.c
Normal file
76
src/port/fseeko.c
Normal 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
|
Reference in New Issue
Block a user