]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
chfn: clean up parse_argv()
authorSami Kerola <kerolasa@iki.fi>
Sun, 14 Dec 2014 13:56:32 +0000 (13:56 +0000)
committerSami Kerola <kerolasa@iki.fi>
Fri, 19 Dec 2014 09:11:04 +0000 (09:11 +0000)
Use switch() case ?: for all option parsing, as in most of the other
source files.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
login-utils/chfn.c

index 81abd11b33433c51851cf0cea1e926ff2e93c895..801bdbe194062d3544382bf22cd71798593033ff 100644 (file)
@@ -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)