[PATCH] Do not interpret -[rwxs] as options in chmod(1)

From: sin <sin_AT_2f30.org>
Date: Thu, 10 Oct 2013 14:50:52 +0100

To chmod recursively use `-R' as opposed to `-r' so we can
distinguish it from the mode `-r'.
---
 chmod.c | 38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)
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...]\n", argv0);
+	eprintf("usage: %s [-R] mode [file...]\n", 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;
 }
-- 
1.8.3.4
--17pEHd4RhPHOinZp--
Received on Mon Sep 17 2001 - 00:00:00 CEST

This archive was generated by hypermail 2.3.0 : Thu Oct 10 2013 - 17:24:04 CEST