Paul Eggert:
> If I understand things correctly, src/extract.c's extract_file
> is invoking open_output_file, which returns -1 with errno==ELOOP.
> extract_file then should invoke:
>
> maybe_recoverable ("./file1", true, &interdir_made)
>
> maybe_recoverable should execute this code:
>
> if (*interdir_made)
> return RECOVER_NO;
>
> switch (e)
> {
> case ELOOP:
The problem turns out to be very straightforward: On FreeBSD, the
open() call returns -1 with errno=EMLINK. This is documented
behavior in FreeBSD's open(2) man page:
[EMLINK] O_NOFOLLOW was specified and the target is a symbolic
link.
Adding EMLINK to the ELOOP case in maybe_recoverable fixes this (and
doesn't break any other regression tests).
--
Christian "naddy" Weisgerber [email protected]