summaryrefslogtreecommitdiffstats
path: root/login-utils/chfn.c
diff options
context:
space:
mode:
authorSami Kerola2014-12-14 14:56:32 +0100
committerSami Kerola2014-12-19 10:11:04 +0100
commite4efecc4dba2d2efd17f89cdddf1b48c87909c1b (patch)
treefd8be226c2d899911d334f903b32bd6c3578a934 /login-utils/chfn.c
parentchfn: add minimalistic struct chfn_control (diff)
downloadkernel-qcow2-util-linux-e4efecc4dba2d2efd17f89cdddf1b48c87909c1b.tar.gz
kernel-qcow2-util-linux-e4efecc4dba2d2efd17f89cdddf1b48c87909c1b.tar.xz
kernel-qcow2-util-linux-e4efecc4dba2d2efd17f89cdddf1b48c87909c1b.zip
chfn: clean up parse_argv()
Use switch() case ?: for all option parsing, as in most of the other source files. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'login-utils/chfn.c')
-rw-r--r--login-utils/chfn.c48
1 files changed, 18 insertions, 30 deletions
diff --git a/login-utils/chfn.c b/login-utils/chfn.c
index 81abd11b3..801bdbe19 100644
--- a/login-utils/chfn.c
+++ b/login-utils/chfn.c
@@ -121,11 +121,11 @@ static int check_gecos_string(const char *msg, char *gecos)
* parse the command line arguments.
* returns true if no information beyond the username was given.
*/
-static void parse_argv(struct chfn_control *ctl, int argc, char *argv[], struct finfo *pinfo)
+static void parse_argv(struct chfn_control *ctl, int argc, char *argv[],
+ struct finfo *pinfo)
{
- int index, c, status;
-
- static struct option long_options[] = {
+ int index, c, status = 0;
+ static const struct option long_options[] = {
{"full-name", required_argument, 0, 'f'},
{"office", required_argument, 0, 'o'},
{"office-phone", required_argument, 0, 'p'},
@@ -135,49 +135,37 @@ static void parse_argv(struct chfn_control *ctl, int argc, char *argv[], struct
{NULL, no_argument, 0, '0'},
};
- optind = 0;
- while (true) {
- c = getopt_long(argc, argv, "f:r:p:h:o:uv", long_options,
- &index);
- if (c == -1)
- break;
- /* version? output version and exit. */
- if (c == 'v') {
- printf(UTIL_LINUX_VERSION);
- exit(EXIT_SUCCESS);
- }
- if (c == 'u')
- usage(stdout);
- /* all other options must have an argument. */
- if (!optarg)
- usage(stderr);
- /* ok, we were given an argument */
- ctl->interactive = 0;
-
- /* now store the argument */
+ while ((c = getopt_long(argc, argv, "f:r:p:h:o:uv", long_options,
+ &index)) != -1) {
switch (c) {
case 'f':
pinfo->full_name = optarg;
- status = check_gecos_string(_("Name"), optarg);
+ status += check_gecos_string(_("Name"), optarg);
break;
case 'o':
pinfo->office = optarg;
- status = check_gecos_string(_("Office"), optarg);
+ status += check_gecos_string(_("Office"), optarg);
break;
case 'p':
pinfo->office_phone = optarg;
- status = check_gecos_string(_("Office Phone"), optarg);
+ status += check_gecos_string(_("Office Phone"), optarg);
break;
case 'h':
pinfo->home_phone = optarg;
- status = check_gecos_string(_("Home Phone"), optarg);
+ status += check_gecos_string(_("Home Phone"), optarg);
break;
+ case 'v':
+ printf(UTIL_LINUX_VERSION);
+ exit(EXIT_SUCCESS);
+ case 'u':
+ usage(stdout);
default:
usage(stderr);
}
- if (status != 0)
- exit(EXIT_FAILURE);
+ ctl->interactive = 0;
}
+ if (status != 0)
+ exit(EXIT_FAILURE);
/* done parsing arguments. check for a username. */
if (optind < argc) {
if (optind + 1 < argc)