From: Keith Bostic Date: Sun, 29 Dec 1991 06:42:34 +0000 (-0800) Subject: don't permit illegal file modes; lots of minor ANSI/cleanup X-Git-Tag: BSD-4_4-Snapshot-Development~8456 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/a22be2265a840f6e71a7b4056c3c2707b77107ff don't permit illegal file modes; lots of minor ANSI/cleanup SCCS-vsn: bin/chmod/chmod.c 5.20 --- diff --git a/usr/src/bin/chmod/chmod.c b/usr/src/bin/chmod/chmod.c index f0d94190c3..6bf76737db 100644 --- a/usr/src/bin/chmod/chmod.c +++ b/usr/src/bin/chmod/chmod.c @@ -12,30 +12,36 @@ char copyright[] = #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)chmod.c 5.19 (Berkeley) %G%"; +static char sccsid[] = "@(#)chmod.c 5.20 (Berkeley) %G%"; #endif /* not lint */ #include #include +#include #include +#include #include +#include #include -extern int errno; int retval; +void err __P((const char *, ...)); +void error __P((char *)); +void usage __P((void)); + +int main(argc, argv) int argc; - char **argv; + char *argv[]; { - extern int optind; register FTS *fts; register FTSENT *p; register int oct, omode; - register char *mode; - mode_t *set, *setmode(); struct stat sb; + mode_t *set; int ch, fflag, rflag; + char *ep, *mode; fflag = rflag = 0; while ((ch = getopt(argc, argv, "Rfrwx")) != EOF) @@ -63,23 +69,21 @@ done: argv += optind; mode = *argv; if (*mode >= '0' && *mode <= '7') { - omode = (int)strtol(mode, (char **)NULL, 8); + omode = (int)strtol(mode, &ep, 8); + if (omode < 0 || *ep) + err("invalid file mode: %s", mode); oct = 1; } else { - if (!(set = setmode(mode))) { - (void)fprintf(stderr, "chmod: invalid file mode.\n"); - exit(1); - } + if (!(set = setmode(mode))) + err("invalid file mode: %s", mode); oct = 0; } retval = 0; if (rflag) { - if (!(fts = fts_open(++argv, - oct ? FTS_NOSTAT|FTS_PHYSICAL : FTS_PHYSICAL, 0))) { - (void)fprintf(stderr, "chmod: %s.\n", strerror(errno)); - exit(1); - } + if ((fts = fts_open(++argv, + oct ? FTS_NOSTAT|FTS_PHYSICAL : FTS_PHYSICAL, 0)) == NULL) + err("%s", strerror(errno)); while (p = fts_read(fts)) switch(p->fts_info) { case FTS_D: @@ -87,9 +91,7 @@ done: argv += optind; case FTS_DNR: case FTS_ERR: case FTS_NS: - (void)fprintf(stderr, "chmod: %s: %s.\n", - p->fts_path, strerror(errno)); - exit(1); + err("%s: %s", p->fts_path, strerror(errno)); default: if (chmod(p->fts_accpath, oct ? omode : getmode(set, p->fts_statb.st_mode)) && @@ -111,15 +113,46 @@ done: argv += optind; exit(retval); } +void error(name) char *name; { - (void)fprintf(stderr, "chmod: %s: %s.\n", name, strerror(errno)); + (void)fprintf(stderr, "chmod: %s: %s\n", name, strerror(errno)); retval = 1; } +void usage() { - (void)fprintf(stderr, "chmod: chmod [-R] mode file ...\n"); + (void)fprintf(stderr, "usage: chmod [-R] mode file ...\n"); + exit(1); +} + +#if __STDC__ +#include +#else +#include +#endif + +void +#if __STDC__ +err(const char *fmt, ...) +#else +err(fmt, va_alist) + char *fmt; + va_dcl +#endif +{ + va_list ap; +#if __STDC__ + va_start(ap, fmt); +#else + va_start(ap); +#endif + (void)fprintf(stderr, "chmod: "); + (void)vfprintf(stderr, fmt, ap); + va_end(ap); + (void)fprintf(stderr, "\n"); exit(1); + /* NOTREACHED */ }