Re: git: 824bbb9a4082 - main - diff: consider two files with same inodes as identical

From: Alan Somers <asomers_at_freebsd.org>
Date: Thu, 07 Oct 2021 15:32:17 UTC
On Thu, Oct 7, 2021 at 9:09 AM Mariusz Zaborski <oshogbo@freebsd.org> wrote:
>
> The branch main has been updated by oshogbo:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=824bbb9a40820fb62bde0a91c0f13e0b894da149
>
> commit 824bbb9a40820fb62bde0a91c0f13e0b894da149
> Author:     Mariusz Zaborski <oshogbo@FreeBSD.org>
> AuthorDate: 2021-10-07 15:07:00 +0000
> Commit:     Mariusz Zaborski <oshogbo@FreeBSD.org>
> CommitDate: 2021-10-07 15:07:00 +0000
>
>     diff: consider two files with same inodes as identical
>
>     Obtained from:  OpenBSD
>     MFC after:      1 week
> ---
>  usr.bin/diff/diffreg.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
> index fc3c3406a073..995843f9e539 100644
> --- a/usr.bin/diff/diffreg.c
> +++ b/usr.bin/diff/diffreg.c
> @@ -440,6 +440,10 @@ files_differ(FILE *f1, FILE *f2, int flags)
>         if ((flags & (D_EMPTY1|D_EMPTY2)) || stb1.st_size != stb2.st_size ||
>             (stb1.st_mode & S_IFMT) != (stb2.st_mode & S_IFMT))
>                 return (1);
> +
> +       if (stb1.st_dev == stb2.st_dev && stb1.st_ino == stb2.st_ino)
> +               return (0);
> +

Checking st_dev is not correct.  It does necessarily bear any relation
to the specific mounted file system.  It might, but that's up to the
file system driver.  fusefs, for example, allows the server to
populate that field with whatever it damn well pleases.  diff should
use statfs instead, and check the f_fsid field.  That would probably
work.
-Alan