Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Apr 1998 07:53:58 +0000 (GMT)
From:      Terry Lambert <tlambert@primenet.com>
To:        dnelson@emsphone.com (Dan Nelson)
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: how to fseek past 2GB?
Message-ID:  <199804300753.AAA00308@usr05.primenet.com>
In-Reply-To: <19980429150055.A17639@emsphone.com> from "Dan Nelson" at Apr 29, 98 03:00:55 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> I recently noticed that there is no way to fseek() past the 2GB mark on
> files opened with fopen().  The offset in the FILE struct is an fpos_t;
> there's just no way to get at it.

Heh.

	...
	fseek( fp, 1<<30, SEEK_SET);	/* first 2G*/
	fseek( fp, 1<<30, SEEK_CUR);	/* next 2G*/
	fseek( fp, 1, SEEK_END);	/* last byte*/
	...

It'd be easy to wrap this.  8-).

For a more FreeBSD-specific workaround:

off_t
lfseek( FILE *fp, off_t offset, int whence)
{
	off_t	new;

	fp->_flags &= ~__SOFF;		/* invalidate offset cache*/
	new = lseek( fileno(fp), offset, whence);
	fseek( fp, 0, SEEK_CUR);

	return( new);
}


On your patches: I think there are standard names for the functions
you implemented, so they should probably be rolled in.  But the
workarounds should work for 2.2.6 people.


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804300753.AAA00308>