From owner-freebsd-hackers Thu Apr 30 22:20:18 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id WAA29557 for freebsd-hackers-outgoing; Thu, 30 Apr 1998 22:20:18 -0700 (PDT) (envelope-from owner-freebsd-hackers@FreeBSD.ORG) Received: from kithrup.com (kithrup.com [205.179.156.40]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id WAA29540 for ; Thu, 30 Apr 1998 22:20:09 -0700 (PDT) (envelope-from sef@kithrup.com) Received: (from sef@localhost) by kithrup.com (8.8.8/8.8.8) id WAA16794; Thu, 30 Apr 1998 22:20:09 -0700 (PDT) (envelope-from sef) Date: Thu, 30 Apr 1998 22:20:09 -0700 (PDT) From: Sean Eric Fagan Message-Id: <199805010520.WAA16794@kithrup.com> To: hackers@FreeBSD.ORG Reply-To: hackers@FreeBSD.ORG Subject: Re: how to fseek past 2GB? In-Reply-To: <19980430222914.A20607.kithrup.freebsd.hackers@emsphone.com> References: <199804300753.AAA00308@usr05.primenet.com>; from "Terry Lambert" on Thu Apr 30 07:53:58 GMT 1998 Organization: Kithrup Enterprises, Ltd. Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG In article <19980430222914.A20607.kithrup.freebsd.hackers@emsphone.com> you write: > For fseek(), the resulting file offset would be a value which > cannot be represented correctly in an object of type long. > >Should I code for this error case, or let fseek hopscotch into the >2GB >area? Are there any programs that even know it's possible? Or you could apply these patches which, admittedly, I haven't even compiled yet ;). This is approximately what Chris Torek did to do the same thing, he says. Index: fgetpos.c =================================================================== RCS file: /usr/cvs/src/lib/libc/stdio/fgetpos.c,v retrieving revision 1.6 diff -u -r1.6 fgetpos.c --- fgetpos.c 1998/04/11 07:40:42 1.6 +++ fgetpos.c 1998/05/01 05:17:47 @@ -50,6 +50,7 @@ FILE *fp; fpos_t *pos; { + extern fpos_t __sftell(FILE*); int retval; FLOCKFILE(fp); retval = (*pos = ftell(fp)) == (fpos_t)-1; Index: fseek.c =================================================================== RCS file: /usr/cvs/src/lib/libc/stdio/fseek.c,v retrieving revision 1.7 diff -u -r1.7 fseek.c --- fseek.c 1998/04/11 07:40:44 1.7 +++ fseek.c 1998/05/01 05:17:49 @@ -58,9 +58,9 @@ * `Whence' must be one of the three SEEK_* macros. */ int -fseek(fp, offset, whence) +__sfseek(fp, offset, whence) register FILE *fp; - long offset; + fpos_t offset; int whence; { register fpos_t (*seekfn) __P((void *, fpos_t, int)); @@ -257,4 +257,13 @@ fp->_flags &= ~__SEOF; FUNLOCKFILE(fp); return (0); +} + +int +fseek(fp, offset, whence) + FILE *fp; + long offset; + int whence; +{ + return __sfseek(fp, (fpos_t)offset, whence); } Index: fsetpos.c =================================================================== RCS file: /usr/cvs/src/lib/libc/stdio/fsetpos.c,v retrieving revision 1.5 diff -u -r1.5 fsetpos.c --- fsetpos.c 1997/02/22 15:02:06 1.5 +++ fsetpos.c 1998/05/01 05:17:49 @@ -52,5 +52,6 @@ FILE *iop; const fpos_t *pos; { - return (fseek(iop, (long)*pos, SEEK_SET)); + extern int __sfseek(FILE *, fpos_t, int) + return (__sfseek(iop, *pos, SEEK_SET)); } Index: ftell.c =================================================================== RCS file: /usr/cvs/src/lib/libc/stdio/ftell.c,v retrieving revision 1.9 diff -u -r1.9 ftell.c --- ftell.c 1998/04/11 07:40:44 1.9 +++ ftell.c 1998/05/01 05:17:48 @@ -50,8 +50,8 @@ /* * ftell: return current offset. */ -long -ftell(fp) +fpos_t +__sftell(fp) register FILE *fp; { register fpos_t pos; @@ -94,4 +94,11 @@ } FUNLOCKFILE(fp); return (pos); +} + +long +ftell(fp) + register FILE *fp; +{ + return (long)__sftell(fp); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message