Return to BSD News archive
Newsgroups: comp.unix.solaris,comp.unix.bsd.misc
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!news.Hawaii.Edu!news.caldera.com!enews.sgi.com!EU.net!sun4nl!cs.vu.nl!kjb
From: kjb@cs.vu.nl (Kees J Bot)
Subject: Re: Solaris 2.6
Nntp-Posting-Host: hornet.cs.vu.nl
References: <32986299.AC7@mail.esrin.esa.it> <57djlg$bks@agate.berkeley.edu> <57dkbq$bsr@panix2.panix.com> <casper.329abb76@mail.fwi.uva.nl> <57ej3a$7ij@panix2.panix.com> <casper.329ae8f2@mail.fwi.uva.nl> <57hhcp$kp9@innocence.interface-business.de>
Sender: news@cs.vu.nl
Organization: Fac. Wiskunde & Informatica, VU, Amsterdam
Date: Fri, 29 Nov 1996 10:39:30 GMT
Message-ID: <E1Mo9u.9oJ@cs.vu.nl>
Distribution: inet
Lines: 42
Xref: euryale.cc.adfa.oz.au comp.unix.solaris:90853 comp.unix.bsd.misc:1627
j@ida.interface-business.de (J Wunsch) writes:
[snip]
>int
>main(void)
>{
> int fd;
> off_t o;
> ssize_t x;
> char b[200];
> if ((fd = open("foobar", O_RDWR|O_CREAT, 0666)) == -1)
> return 1;
> write(fd, s, sizeof s - 1);
> lseek(fd, 6, SEEK_SET);
[snip]
Note that SEEK_SET is 0, so this is compiled to something that looks
like this:
push 0 ! SEEK_SET
push 0 ! High 32 bits of (off_t) 6
push 6 ! Low 32 bits of (off_t) 6
push -4(ebp) ! Fd most likely
call _lseek
add esp, 4*4
If an old library assumes that off_t is 32 bits then it will use the
high half of the offset argument that was pushed above. This high half
is conveniently zero, the same as SEEK_SET.
Could you try again with the above lseek() call replaced by:
lseek(fd, 3, SEEK_SET);
lseek(fd, 3, SEEK_CUR);
SEEK_CUR is 1, so my guess is that the program linked against the old
library will print "lo World\n", because it sees a 0 as the third
argument of the second lseek().
--
Kees J. Bot (kjb@cs.vu.nl)
Systems Programmer, Vrije Universiteit Amsterdam