On Sun, Feb 24, 2002 at 08:43:11PM +0000, Matthew Garrett wrote:
> Fakeroot on NetBSD is dying inside libfakeroot. The mess of wrap* has left
> me sufficiently confused that I'm not really sure what's going on, and
> I've certainly got no idea why it dies. Does anyone who understands these
> things better than me want to take a look at it?
Thanks to the combined efforts of reasonable quantities of alcohol and
several people who know significantly more about this sort of thing than
me, it now works. /usr/include/sys/stat.h rewrites fstat() to
__fstat13(). The fstat() in libfakeroot therefore gets rewritten to
__fstat13(). The fstat in libfakeroot calls fstat() in libc, which simply
calls __fstat13(). Sadly, since libfakeroot is LD_PRELOADed, this calls
the libfakeroot version. Which calls fstat() again. Altering libfakeroot
to call __fstat13() rather than fstat() makes things work, but this is
likely to break if the version name changes again in the future. I'm not
sure what a more long-term fix is.
there are lots of versioned system calls. i'm sure this really
affects more than fstat(). the others probably just cause less
drastic (but potentially more dangerous!) lossage.