[hackers] [sbase] Do not interpret -[rwxs] as options in chmod(1) || sin

From: <git_AT_suckless.org>
Date: Sat, 12 Oct 2013 17:20:36 +0200

commit d8718d4159ccb85400baa518d7fdcc1f33558dc2
Author: sin <sin_AT_2f30.org>
Date: Thu Oct 10 14:50:52 2013 +0100

    Do not interpret -[rwxs] as options in chmod(1)
    
    To chmod recursively use `-R' as opposed to `-r' so we can
    distinguish it from the mode `-r'.

diff --git a/chmod.c b/chmod.c
index 9cdb50e..6d0f8a7 100644
--- a/chmod.c
+++ b/chmod.c
_AT_@ -16,26 +16,44 @@ static mode_t mode = 0;
 static void
 usage(void)
 {
- eprintf("usage: %s [-r] mode [file...]
", argv0);
+ eprintf("usage: %s [-R] mode [file...]
", argv0);
 }
 
 int
 main(int argc, char *argv[])
 {
+ int c;
+ argv0 = argv[0];
 
- ARGBEGIN {
- case 'r':
- rflag = true;
- break;
- default:
- usage();
- } ARGEND;
+ while (--argc > 0 && (*++argv)[0] == '-') {
+ while ((c = *++argv[0])) {
+ switch (c) {
+ case 'R':
+ rflag = true;
+ break;
+ case 'r': case 'w': case 'x': case 's':
+ /*
+ * -[rwxs] 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:
+ parsemode(argv[0]);
+ argv++;
+ argc--;
 
         if(argc < 1)
                 usage();
 
- parsemode(argv[0]);
- for(++argv; argc > 0; argc--)
+ for (; argc > 0; argc--, argv++)
                 chmodr(argv[0]);
         return EXIT_SUCCESS;
 }
Received on Sat Oct 12 2013 - 17:20:36 CEST

This archive was generated by hypermail 2.3.0 : Sat Oct 12 2013 - 17:24:16 CEST