diff options
Diffstat (limited to 'login-utils/chfn.c')
-rw-r--r-- | login-utils/chfn.c | 48 |
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) |