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

From: Mariusz Zaborski <oshogbo_at_freebsd.org>
Date: Thu, 07 Oct 2021 15:55:44 UTC
Like Ian said from what I know this is the way of uniquely identify the
file.
We use this technique in flopen(3), pidfile_open(3) or fts(3).

On Thu, 7 Oct 2021 at 17:40, Ian Lepore <ian@freebsd.org> wrote:

> On Thu, 2021-10-07 at 09:32 -0600, Alan Somers wrote:
> > 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
>
> That may be a fusefs bug, then.  Posix states
>
>    The st_ino and st_dev fields taken together uniquely identify the
>    file within the system.
>
> And I've seen real-world code more than once that uses st_dev equality
> to decide whether to rename versus copy-and-delete a file.
>
> -- Ian
>
>
>