Date: Sun, 19 Aug 2007 06:00:14 GMT From: Ighighi <ighighi@gmail.com> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/112827: [PATCH]: chmod-like -f & -v options to chflags(1) Message-ID: <200708190600.l7J60Et5077566@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/112827; it has been noted by GNATS. From: Ighighi <ighighi@gmail.com> To: bug-followup@freebsd.org Cc: Subject: Re: bin/112827: [PATCH]: chmod-like -f & -v options to chflags(1) Date: Sun, 19 Aug 2007 01:55:23 -0400 This is a multi-part message in MIME format. --------------050605040509010708060502 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit The patch that must have been attached in the previous post. --------------050605040509010708060502 Content-Type: text/x-patch; name="chflags.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="chflags.patch" # # (c) 2007 by Ighighi # # This patch adds support for chmod/chown/chgrp -f & -v options to chflags(1) # See http://www.freebsd.org/cgi/query-pr.cgi?pr=112827 # --- src/bin/chflags/chflags.c.orig Sat May 14 19:23:10 2005 +++ src/bin/chflags/chflags.c Tue Jun 12 04:41:15 2007 @@ -62,12 +62,13 @@ FTSENT *p; u_long clear, set; long val; - int Hflag, Lflag, Rflag, hflag, ch, fts_options, oct, rval; + int Hflag, Lflag, Rflag, fflag, hflag, vflag, ch, fts_options, oct, rval; char *flags, *ep; + u_long newflags; int (*change_flags)(const char *, unsigned long); - Hflag = Lflag = Rflag = hflag = 0; - while ((ch = getopt(argc, argv, "HLPRh")) != -1) + Hflag = Lflag = Rflag = fflag = hflag = vflag = 0; + while ((ch = getopt(argc, argv, "HLPRfhv")) != -1) switch (ch) { case 'H': Hflag = 1; @@ -83,9 +84,15 @@ case 'R': Rflag = 1; break; + case 'f': + fflag = 1; + break; case 'h': hflag = 1; break; + case 'v': + vflag++; + break; case '?': default: usage(); @@ -166,18 +173,20 @@ default: break; } - if (oct) { - if (!(*change_flags)(p->fts_accpath, set)) - continue; - } else { - p->fts_statp->st_flags |= set; - p->fts_statp->st_flags &= clear; - if (!(*change_flags)(p->fts_accpath, - (u_long)p->fts_statp->st_flags)) - continue; + newflags = oct ? set : (p->fts_statp->st_flags | set) & clear; + if (newflags == p->fts_statp->st_flags) + continue; + if ((*change_flags)(p->fts_accpath, newflags) && !fflag) { + warn("%s", p->fts_path); + rval = 1; + } else if (vflag) { + (void)printf("%s", p->fts_path); + + if (vflag > 1) + (void)printf(": 0%lo -> 0%lo", + (u_long) p->fts_statp->st_flags, newflags); + (void)printf("\n"); } - warn("%s", p->fts_path); - rval = 1; } if (errno) err(1, "fts_read"); @@ -188,6 +197,6 @@ usage(void) { (void)fprintf(stderr, - "usage: chflags [-h] [-R [-H | -L | -P]] flags file ...\n"); + "usage: chflags [-fhv] [-R [-H | -L | -P]] flags file ...\n"); exit(1); } --- src/bin/chflags/chflags.1.orig Wed May 17 09:20:21 2006 +++ src/bin/chflags/chflags.1 Tue Jun 12 04:56:19 2007 @@ -40,7 +40,7 @@ .Nd change file flags .Sh SYNOPSIS .Nm -.Op Fl h +.Op Fl fhv .Oo .Fl R .Op Fl H | Fl L | Fl P @@ -57,6 +57,12 @@ .Pp The options are as follows: .Bl -tag -width indent +.It Fl f +Do not display a diagnostic message if +.Nm +could not modify the flags for +.Va file , +nor modify the exit status to reflect such failures. .It Fl H If the .Fl R @@ -79,6 +85,14 @@ .It Fl R Change the file flags for the file hierarchies rooted in the files instead of just the files themselves. +.It Fl v +Cause +.Nm +to be verbose, showing filenames as the flags are modified. +If the +.Fl v +option is specified more than once, the old and new flags of the file +will also be printed, in octal notation. .El .Pp The flags are specified as an octal number or a comma separated list --------------050605040509010708060502--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708190600.l7J60Et5077566>