From: Martin Str|mberg Message-Id: <200301181149.h0IBnhY20842@brother.ludd.luth.se> Subject: Re: lseek() calling llseek() To: djgpp-workers AT delorie DOT com Date: Sat, 18 Jan 2003 12:49:43 +0100 (MET) In-Reply-To: <200301181041.h0IAfYc20680@brother.ludd.luth.se> from "Martin Str|mberg" at Jan 18, 2003 11:41:34 AM X-Mailer: ELM [version 2.5 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp-workers AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp-workers AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk According to Martin Str|mberg: > Comments are welcome. In particular on my documentation changes and the > last return statement in lseek() (which could be made safer with some more > lines of code). ... > + return llseek_offset&0xffffffff; /* Magically works right now with > + GCC (no guarantee). The problem > + is when INT_MAX (2^31-1) < > + llseek_offset, which invokes > + implementation defined > + behaviour. */ Something like this: llseek_offset = llseek(handle, offset, whence); if( offset == -1 ) { return -1; /* llseek sets errno. */ } /* Here we rely on that llseek()'s return range is [-1, 2^32-2]. */ if( llseek_offset&0x80000000 ) { return (llseek_offset&0x7fffffff)|0x80000000; } else { return llseek_offset&0x7fffffff; } Right, MartinS