kern/106255: [msdosfs] : correct setting of archive flag

Bruce Evans bde at zeta.org.au
Sun Dec 3 16:40:19 PST 2006


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

From: Bruce Evans <bde at zeta.org.au>
To: Rene Ladan <r.c.ladan at gmail.com>
Cc: freebsd-gnats-submit at FreeBSD.org, freebsd-bugs at FreeBSD.org
Subject: Re: kern/106255: [msdosfs] : correct setting of archive flag
Date: Mon, 4 Dec 2006 11:39:32 +1100 (EST)

 On Sun, 3 Dec 2006, Rene Ladan wrote:
 
 >> Description:
 > The MSDOS file system has an archive bit in the flags field.  This bit roughly corresponds to the archive flag on the UFS file system.  However, it is set the wrong way around: the flag should be set when the bit is present, and cleared when the bit is absent.
 
 The comment in msdosfs/direntry.h says that ATTR_ARCHIVE means that
 the file is new or modified (in other words, not archived), while the
 comment in sys/stat.h says that SF_ARCHIVED means that the file is
 archived, but I think both mean that it is archived.
 
 > --- msdosfs_vnops.c	Mon Nov  6 14:41:57 2006
 > +++ msdosfs_vnops.c.rene	Sun Dec  3 11:58:47 2006
 > @@ -352,7 +352,7 @@
 > 		vap->va_ctime = vap->va_mtime;
 > 	}
 > 	vap->va_flags = 0;
 > -	if ((dep->de_Attributes & ATTR_ARCHIVE) == 0)
 > +	if (dep->de_Attributes & ATTR_ARCHIVE)
 > 		vap->va_flags |= SF_ARCHIVED;
 > 	vap->va_gen = 0;
 > 	vap->va_blocksize = pmp->pm_bpcluster;
 
 This only fixes the reporting of the flag.  msdosfs still maintains
 the flag perfectly backwards (except DETIMES() is missing setting of
 it for for all changes -- I think all changes to metadata except
 possibly to atimes should set it to be perfectly backwards and clear
 it to be correct).
 
 Grep shows that this flag is negatively useful in FreeBSD.  No file
 systems maintain it (except for getting it backwards in msdosfs).
 All archiving utilities need to maintain it for it to be useful,
 but none except tar even reference it (except possibly indirectly via
 strtofflags(3)), and tar seems to just print it (indirectly via a
 special version of strtofflags(3)).
 
 Bruce


More information about the freebsd-bugs mailing list