ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/src/vendor/FreeBSD/dist/bin/chflags/chflags.c
(Generate patch)

Comparing vendor/FreeBSD/dist/bin/chflags/chflags.c (file contents):
Revision 9656 by laffer1, Sun Oct 22 21:03:47 2017 UTC vs.
Revision 9657 by laffer1, Sun Oct 22 21:36:58 2017 UTC

# Line 40 | Line 40 | static char sccsid[] = "@(#)chflags.c  8.5 (Berkeley) 4
40   #endif
41  
42   #include <sys/cdefs.h>
43 < __FBSDID("$FreeBSD: release/7.0.0/bin/chflags/chflags.c 146224 2005-05-14 23:23:10Z dd $");
43 > __FBSDID("$FreeBSD$");
44  
45   #include <sys/types.h>
46   #include <sys/stat.h>
# Line 53 | Line 53 | __FBSDID("$FreeBSD: release/7.0.0/bin/chflags/chflags.
53   #include <string.h>
54   #include <unistd.h>
55  
56 < void    usage(void);
56 > static void usage(void);
57  
58   int
59   main(int argc, char *argv[])
60   {
61          FTS *ftsp;
62          FTSENT *p;
63 <        u_long clear, set;
63 >        u_long clear, newflags, set;
64          long val;
65 <        int Hflag, Lflag, Rflag, hflag, ch, fts_options, oct, rval;
65 >        int Hflag, Lflag, Rflag, fflag, hflag, vflag;
66 >        int ch, fts_options, oct, rval;
67          char *flags, *ep;
68          int (*change_flags)(const char *, unsigned long);
69  
70 <        Hflag = Lflag = Rflag = hflag = 0;
71 <        while ((ch = getopt(argc, argv, "HLPRh")) != -1)
70 >        Hflag = Lflag = Rflag = fflag = hflag = vflag = 0;
71 >        while ((ch = getopt(argc, argv, "HLPRfhv")) != -1)
72                  switch (ch) {
73                  case 'H':
74                          Hflag = 1;
# Line 83 | Line 84 | main(int argc, char *argv[])
84                  case 'R':
85                          Rflag = 1;
86                          break;
87 +                case 'f':
88 +                        fflag = 1;
89 +                        break;
90                  case 'h':
91                          hflag = 1;
92                          break;
93 +                case 'v':
94 +                        vflag++;
95 +                        break;
96                  case '?':
97                  default:
98                          usage();
# Line 108 | Line 115 | main(int argc, char *argv[])
115                          fts_options |= FTS_LOGICAL;
116                  }
117          } else
118 <                fts_options = FTS_LOGICAL;
118 >                fts_options = hflag ? FTS_PHYSICAL : FTS_LOGICAL;
119  
120          /* XXX: Why don't chflags and lchflags have compatible prototypes? */
121          if (hflag)
# Line 166 | Line 173 | main(int argc, char *argv[])
173                  default:
174                          break;
175                  }
176 <                if (oct) {
177 <                        if (!(*change_flags)(p->fts_accpath, set))
178 <                                continue;
179 <                } else {
180 <                        p->fts_statp->st_flags |= set;
181 <                        p->fts_statp->st_flags &= clear;
182 <                        if (!(*change_flags)(p->fts_accpath,
183 <                                    (u_long)p->fts_statp->st_flags))
184 <                                continue;
176 >                if (oct)
177 >                        newflags = set;
178 >                else
179 >                        newflags = (p->fts_statp->st_flags | set) & clear;
180 >                if (newflags == p->fts_statp->st_flags)
181 >                        continue;
182 >                if ((*change_flags)(p->fts_accpath, newflags) && !fflag) {
183 >                        warn("%s", p->fts_path);
184 >                        rval = 1;
185 >                } else if (vflag) {
186 >                        (void)printf("%s", p->fts_path);
187 >                        if (vflag > 1)
188 >                                (void)printf(": 0%lo -> 0%lo",
189 >                                    (u_long)p->fts_statp->st_flags,
190 >                                    newflags);
191 >                        (void)printf("\n");
192                  }
179                warn("%s", p->fts_path);
180                rval = 1;
193          }
194          if (errno)
195                  err(1, "fts_read");
196          exit(rval);
197   }
198  
199 < void
199 > static void
200   usage(void)
201   {
202          (void)fprintf(stderr,
203 <            "usage: chflags [-h] [-R [-H | -L | -P]] flags file ...\n");
203 >            "usage: chflags [-fhv] [-R [-H | -L | -P]] flags file ...\n");
204          exit(1);
205   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines