[hackers] [sbase] Eliminating the getopt disgrace. || Christoph Lohmann
commit 4d38f6068500104693796059da3950a2de296af3
Author: Christoph Lohmann <20h_AT_r-36.net>
Date: Fri Jun 14 20:20:47 2013 +0200
Eliminating the getopt disgrace.
diff --git a/chmod.c b/chmod.c
index 950c2f7..805ecdc 100644
--- a/chmod.c
+++ b/chmod.c
_AT_@ -13,26 +13,32 @@ static bool rflag = false;
static char oper = '=';
static mode_t mode = 0;
+static void
+usage(void)
+{
+ eprintf("usage: %s [-r] mode [file...]
", argv0);
+ exit(1);
+}
+
int
main(int argc, char *argv[])
{
- char c;
- while((c = getopt(argc, argv, "r")) != -1)
- switch(c) {
- case 'r':
- rflag = true;
- break;
- default:
- exit(EXIT_FAILURE);
- }
- if(optind == argc)
- eprintf("usage: %s [-r] mode [file...]
", argv[0]);
+ ARGBEGIN {
+ case 'r':
+ rflag = true;
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if(argc < 1)
+ usage();
- parsemode(argv[optind++]);
- for(; optind < argc; optind++)
- chmodr(argv[optind]);
- return EXIT_SUCCESS;
+ parsemode(argv[0]);
+ for(++argv; argc > 0; argc--)
+ chmodr(argv[0]);
+ return 0;
}
void
diff --git a/chown.c b/chown.c
index 57da60a..867785c 100644
--- a/chown.c
+++ b/chown.c
_AT_@ -14,22 +14,30 @@ static bool rflag = false;
static struct passwd *pw = NULL;
static struct group *gr = NULL;
+static void
+usage(void)
+{
+ eprintf("usage: %s [-r] [owner][:[group]] file...
", argv0);
+ exit(1);
+}
+
int
main(int argc, char *argv[])
{
- char c, *owner, *group;
+ char *owner, *group;
- while((c = getopt(argc, argv, "r")) != -1)
- switch(c) {
- case 'r':
- rflag = true;
- break;
- default:
- exit(EXIT_FAILURE);
- }
- if(optind == argc)
- eprintf("usage: %s [-r] [owner][:group] [file...]
", argv[0]);
- owner = argv[optind++];
+ ARGBEGIN {
+ case 'r':
+ rflag = true;
+ break;
+ default:
+ usage();
+ } ARGEND;
+ if(argc == 0)
+ usage();
+
+ owner = argv[0];
+ argv++;
if((group = strchr(owner, ':')))
*group++ = '
Received on Fri Jun 14 2013 - 20:22:18 CEST
This archive was generated by hypermail 2.3.0
: Fri Jun 14 2013 - 20:24:13 CEST