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



On Fri, Dec 19, 2025 at 11:22 AM Christos Zoulas <christos%zoulas.com@localhost> wrote:
>
>
>
> > On Dec 19, 2025, at 9:15 AM, Jose Luis Duran via gnats <gnats-admin%netbsd.org@localhost> wrote:
> >
> > The following reply was made to PR bin/59838; it has been noted by GNATS.
> >
>
> [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 changed.
> >          * Note that we always output a /set record for the first directory.
> >          */
> > -       if (((keys & (F_UNAME | F_UID)) && (*puid != saveuid)) ||
> > +       if ((keys & F_TYPE) ||
> > +           ((keys & (F_UNAME | F_UID)) && (*puid != saveuid)) ||
> >             ((keys & (F_GNAME | F_GID)) && (*pgid != savegid)) ||
> > -           ((keys & F_MODE) && (*pmode != savemode)) ||
> > +           ((keys & F_MODE) && (*pmode != savemode)) ||
> >             ((keys & F_FLAGS) && (*pflags != saveflags)) ||
> >             first) {
> >                 first = 0;
> > -               if (flavor != F_NETBSD6 && dflag)
> > -                       fprintf(fp, "/set type=dir");
> > -               else
> > -                       fprintf(fp, "/set type=file");
> > +               fprintf(fp, "/set");
> > +               if (keys & F_TYPE) {
> > +                       if (flavor != F_NETBSD6 && dflag)
> > +                               fprintf(fp, " type=dir");
> > +                       else
> > +                               fprintf(fp, " type=file");
> > +               }
> >                 if (keys & (F_UID | F_UNAME)) {
> >                         if (keys & F_UNAME &&
> >                             (name = user_from_uid(saveuid, 1)) != NULL)
> >
>
> 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=<dir/file>" conditionally, for example:
    $ mtree -cn -k uid -R type -p /usr/bin/ -x
In this case, "/set uid=0" should be printed, notice that type is
indeed excluded from the line.

> christos
>



Home | Main Index | Thread Index | Old Index