From: Bruce Momjian Date: Wed, 23 Oct 2002 20:56:24 +0000 (+0000) Subject: Add fseeko/ftello using fsetpos/fgetpos for BSD/OS. X-Git-Tag: REL7_3~186 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dc4d18e0567eee4af09a1d146a92fd7b59c353a2;p=postgresql Add fseeko/ftello using fsetpos/fgetpos for BSD/OS. --- diff --git a/configure b/configure index 40ff59975b..d4b1134f3a 100755 --- a/configure +++ b/configure @@ -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 diff --git a/configure.in b/configure.in index 8d6cf49618..1fd159c36b 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.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 diff --git a/src/port/fseeko.c b/src/port/fseeko.c new file mode 100644 index 0000000000..22aa80c98d --- /dev/null +++ b/src/port/fseeko.c @@ -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 +#include +#include +#include + +/* + * 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