Subject: Re: Lseek'ing backwards with SEEK_CUR?
To: Rafal Boni <r-boni@uiuc.edu>
From: Frank van der Linden <vdlinden@fwi.uva.nl>
List: current-users
Date: 12/14/1994 12:45:15
Rafal Boni writes:

> 	I have a program that writes out records to a file, sometimes needing
> 	to insert them in the middle of the file.  Invariably, this program
> 	will close the file at some point, resulting in a *HUGE* file that's
> 	backfiled with zeros.

(...)

> 		lseek(fd, - RECSIZE, SEEK_CUR)

> 	If I replace that with the following two lines of code, life seems
> 	much better:	[ie, the file is correct size, etc.]

> 		curpos = lseek(fd, 0, SEEK_CUR);
> 		lseek(fd, curpos - RECSIZE, SEEK_SET);

Have you included unistd.h for an lseek prototype? It seems like
curpos - RECSIZE is succeeding, because curpos may be an off_t var,
so the subtraction result is fine, but just -RECSIZE may fail, because
the compiler would make that into a 32bit constant, not 64bit.

- Frank