From: Alex Riesen Date: Thu, 26 Jul 2007 16:51:05 GMT Subject: Re: index-pack died on pread Message-ID: <81b0412b0707260951h57fc91dbsd5a0a126f0e16fee@mail.gmail.com> In-Reply-To: On 7/26/07, Linus Torvalds wrote: > On Thu, 26 Jul 2007, Alex Riesen wrote: > > > > > > It's true that pread() is used much less than normal reads, and maybe the > > > cygwin pread() is indeed broken. But it's intriguing how apparently both > > > HP-UX and Cygwin are showing the same breakage. > > > > Maybe because neither _has_ POSIX pread? > > HP-UX? No pread()? It wouldn't link if it didn't have pread(). So it > clearly has pread(), it's just somehow broken. I remember it didn't and was emulated with lseek. > > This is cygwin's pread, I believe: > > > > http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/fhandler_disk_file.cc?rev=1.225&content-type=text/x-cvsweb-markup&cvsroot=src > > I'm not saying that's great programming, but the "git_pread()" that git > will use in the absense of a real pread() is actually even *less* of a > POSIX pread, since it doesn't even try to save/restore the old position > (it knows that git doesn't care). Not that. I meant the value read returned wasn't checked nor returned. Suppose read failed (on Windows it happens all the time, especially if you stress it a bit) - you'll never know it did and the buffer will contain either garbage or previous data. Now imagine we _did_ have a past-eof condition or bleeding into sign-bit (because of some 64-bit confusion)... > So I don't think that explains why git doesn't like cygwin's pread. I > suspect an earlier version of cygwin had an even more broken version of > pread at some point. Yep, that could be another reason.