Subject: lseek
To: None <current-users@sun-lamp.cs.berkeley.edu>
From: Lennart Augustsson <augustss@cs.chalmers.se>
List: current-users
Date: 03/31/1994 15:01:16
As far as I can tell the new lseek system call (#199) is broken.
Try the following:
-----------------------
#include <sys/types.h>
extern off_t lseek(int, off_t, int);
extern int errno;
main()
{
union {
off_t x;
long l[2];
} u;
u.x = lseek(0, (off_t)0, 0);
printf("%x %x %d errno=%d\n", u.l[0], u.l[1], u.x == (off_t)-1, errno);
}
---------------
and pipe something into it. errno is set correctlty, but the
return value from lseek is not -1.
After digging a few minutes in the kernel I think the problem is
that when lseek does an error return it does not set both eax/edx,
but just eax to -1.
This bug breaks gawk, and maybe more programs. BTW, gawk also
needs a gid_t (as does several other programs, like sh and id).
-- Lennart
------------------------------------------------------------------------------