Subject: bug#71486: no-dereference test fails on FreeBSD, NetBSD

From: Bruno Haible <[email-masked]>
Date: Tue, 11 Jun 2024 22:20:42 +0200

On FreeBSD 14.0 and NetBSD 10.0, the unit test 'no-dereference' fails.

How to reproduce:

Use current diffutils git master.

$ ln -s loop loop
$ mkdir subdir
$ ln -s loop subdir/loop

# This part succeeds on all platforms:
$ src/diff --no-dereference loop subdir/loop
$ echo $?
0

# This commands succeeds on all platforms except FreeBSD and NetBSD
# but fails on FreeBSD and NetBSD.
$ src/diff --no-dereference loop subdir
diff: subdir/loop: Too many links

The manual [1] says:
  "If one file is a directory and the other is not, diff compares the file
   in the directory whose name is that of the non-directory."
But single-stepping through the code, I don't get through code that
references 'subdir/loop'. It merely references 'subdir'.

The stack trace is:
  diff.c:880
    -> diff.c:1608
         -> error

Bruno

[1] https://www.gnu.org/software/diffutils/manual/html_node/Invoking-diff.html