aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/chkgrp/chkgrp.c
diff options
context:
space:
mode:
authorEitan Adler <eadler@FreeBSD.org>2012-11-15 15:16:50 +0000
committerEitan Adler <eadler@FreeBSD.org>2012-11-15 15:16:50 +0000
commitce643be1abab0bcc370b717c4c8470178fc22e08 (patch)
tree854ebecfcbbe23e89aa711b52c64304b08bd7c13 /usr.sbin/chkgrp/chkgrp.c
parentc71c7ce71a23d450c6a0ce56fc1a9d662f36f907 (diff)
Add support for a -q flag. While here make the custom argument parsing
use getopt instead of hacking on it more. This change also fixes the method of silencing the compiler warning about gfn being used uninitialized. Approved by: cperciva MFC after: 1 week
Notes
Notes: svn path=/head/; revision=243084
Diffstat (limited to 'usr.sbin/chkgrp/chkgrp.c')
-rw-r--r--usr.sbin/chkgrp/chkgrp.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/usr.sbin/chkgrp/chkgrp.c b/usr.sbin/chkgrp/chkgrp.c
index 82fa8661c711..c76b67fc1ba0 100644
--- a/usr.sbin/chkgrp/chkgrp.c
+++ b/usr.sbin/chkgrp/chkgrp.c
@@ -37,11 +37,12 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include <sysexits.h>
static char empty[] = { 0 };
-static void
+static void __dead2
usage(void)
{
fprintf(stderr, "usage: chkgrp [groupfile]\n");
@@ -53,24 +54,33 @@ main(int argc, char *argv[])
{
unsigned int i;
size_t len;
+ int quiet;
+ int ch;
int n = 0, k, e = 0;
char *line, *f[4], *p;
const char *cp, *gfn;
FILE *gf;
- /* check arguments */
- switch (argc) {
- case 1:
- gfn = "/etc/group";
- break;
- case 2:
- gfn = argv[1];
- break;
- default:
- gfn = NULL; /* silence compiler */
- usage();
+ quiet = 0;
+ while ((ch = getopt(argc, argv, "q")) != -1) {
+ switch (ch) {
+ case 'q':
+ quiet = 1;
+ break;
+ case '?':
+ default:
+ printf("hello\n");
+ usage();
+ }
}
+ if (optind == argc)
+ gfn = "/etc/group";
+ else if (optind == argc - 1)
+ gfn = argv[optind];
+ else
+ usage();
+
/* open group file */
if ((gf = fopen(gfn, "r")) == NULL)
err(EX_NOINPUT, "%s", gfn);
@@ -178,7 +188,7 @@ main(int argc, char *argv[])
/* done */
fclose(gf);
- if (e == 0)
+ if (e == 0 && quiet == 0)
printf("%s is fine\n", gfn);
exit(e ? EX_DATAERR : EX_OK);
}