sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit eff58b553123206677cc8cdde8c7c539662c469e
parent 40bbe91c9ec4b5ff98ba8c96fb5d31fb24ca2f7b
Author: FRIGN <dev@frign.de>
Date:   Sat, 17 Jan 2015 00:01:51 +0100

Refactor chmod(1)

Clean the mess.

Diffstat:
chmod.c | 97+++++++++++++++++++++++++++++++++++++------------------------------------------
1 file changed, 45 insertions(+), 52 deletions(-)

diff --git a/chmod.c b/chmod.c @@ -6,58 +6,10 @@ #include "util.h" -static void chmodr(const char *); - -static int rflag = 0; -static char *modestr = ""; -static mode_t mask = 0; -static int ret = 0; - -static void -usage(void) -{ - eprintf("usage: %s [-R] mode [file...]\n", argv0); -} - -int -main(int argc, char *argv[]) -{ - int c; - argv0 = argv[0]; - - while (--argc > 0 && (*++argv)[0] == '-') { - while ((c = *++argv[0])) { - switch (c) { - case 'R': - rflag = 1; - break; - case 'r': case 'w': case 'x': case 's': case 't': - /* - * -[rwxst] are valid modes so do not interpret - * them as options - in any case we are done if - * we hit this case - */ - --argv[0]; - goto done; - default: - usage(); - } - } - } - -done: - mask = getumask(); - modestr = argv[0]; - argv++; - argc--; - - if (argc < 1) - usage(); - - for (; argc > 0; argc--, argv++) - chmodr(argv[0]); - return ret; -} +static int rflag = 0; +static char *modestr = ""; +static mode_t mask = 0; +static int ret = 0; void chmodr(const char *path) @@ -79,3 +31,44 @@ chmodr(const char *path) if (rflag) recurse(path, chmodr); } + +static void +usage(void) +{ + eprintf("usage: %s [-R] mode [file...]\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + size_t i; + + argv0 = argv[0]; + for (i = 1; i < argc && argv[i][0] == '-'; i++) { + switch (argv[i][1]) { + case 'R': + rflag = 1; + break; + case 'r': case 'w': case 'x': case 's': case 't': + /* + * -[rwxst] are valid modes so do not interpret + * them as options - in any case we are done if + * we hit this case + */ + goto done; + default: + usage(); + } + } +done: + mask = getumask(); + modestr = argv[i]; + + if (argc - i - 1 < 1) + usage(); + + for (++i; i < argc; i++) + chmodr(argv[i]); + + return ret; +}