NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: PR/59838 CVS commit: src/usr.sbin/mtree



The following reply was made to PR bin/59838; it has been noted by GNATS.

From: Jose Luis Duran <jlduran%gmail.com@localhost>
To: Christos Zoulas <christos%zoulas.com@localhost>
Cc: gnats-bugs%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: PR/59838 CVS commit: src/usr.sbin/mtree
Date: Fri, 19 Dec 2025 11:34:45 -0300

 On Fri, Dec 19, 2025 at 11:22=E2=80=AFAM Christos Zoulas <christos@zoulas.c=
 om> wrote:
 >
 >
 >
 > > On Dec 19, 2025, at 9:15=E2=80=AFAM, Jose Luis Duran via gnats <gnats-a=
 dmin%netbsd.org@localhost> wrote:
 > >
 > > The following reply was made to PR bin/59838; it has been noted by GNAT=
 S.
 > >
 >
 > [stuff deleted]
 >
 > > I believe it should also check for the presence of F_TYPE before
 > > printing "/set":
 > >
 > > --- a/usr.sbin/mtree/create.c
 > > +++ b/usr.sbin/mtree/create.c
 > > @@ -396,16 +396,20 @@ statd(FILE *fp, FTS *t, FTSENT *parent, uid_t
 > > *puid, gid_t *pgid, mode_t *pmode,
 > >          * output a new one.  So first we check to see if anything chan=
 ged.
 > >          * Note that we always output a /set record for the first direc=
 tory.
 > >          */
 > > -       if (((keys & (F_UNAME | F_UID)) && (*puid !=3D saveuid)) ||
 > > +       if ((keys & F_TYPE) ||
 > > +           ((keys & (F_UNAME | F_UID)) && (*puid !=3D saveuid)) ||
 > >             ((keys & (F_GNAME | F_GID)) && (*pgid !=3D savegid)) ||
 > > -           ((keys & F_MODE) && (*pmode !=3D savemode)) ||
 > > +           ((keys & F_MODE) && (*pmode !=3D savemode)) ||
 > >             ((keys & F_FLAGS) && (*pflags !=3D saveflags)) ||
 > >             first) {
 > >                 first =3D 0;
 > > -               if (flavor !=3D F_NETBSD6 && dflag)
 > > -                       fprintf(fp, "/set type=3Ddir");
 > > -               else
 > > -                       fprintf(fp, "/set type=3Dfile");
 > > +               fprintf(fp, "/set");
 > > +               if (keys & F_TYPE) {
 > > +                       if (flavor !=3D F_NETBSD6 && dflag)
 > > +                               fprintf(fp, " type=3Ddir");
 > > +                       else
 > > +                               fprintf(fp, " type=3Dfile");
 > > +               }
 > >                 if (keys & (F_UID | F_UNAME)) {
 > >                         if (keys & F_UNAME &&
 > >                             (name =3D user_from_uid(saveuid, 1)) !=3D N=
 ULL)
 > >
 >
 > We do we need to check F_TYPE twice? It is in the outer if...
 
 The outer check is for the case where "/set" should not be printed at
 all, without any key/value pair, for example:
     $ mtree -cn -k flags -R flags,type -p /usr/bin/ -x
 In that corner case, no "/set" line should be printed.
 
 The inner check is to print "type=3D<dir/file>" conditionally, for example:
     $ mtree -cn -k uid -R type -p /usr/bin/ -x
 In this case, "/set uid=3D0" should be printed, notice that type is
 indeed excluded from the line.
 
 > christos
 >
 


Home | Main Index | Thread Index | Old Index