| delorie.com/archives/browse.cgi | search |
| From: | Martin Str|mberg <ams AT ludd DOT luth DOT se> |
| 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 |
| 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 |
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
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |