about summary refs log tree commit diff
path: root/argp
diff options
context:
space:
mode:
Diffstat (limited to 'argp')
-rw-r--r--argp/argp-help.c160
-rw-r--r--argp/argp-parse.c100
2 files changed, 138 insertions, 122 deletions
diff --git a/argp/argp-help.c b/argp/argp-help.c
index 616db9b47c..b0f8d69b07 100644
--- a/argp/argp-help.c
+++ b/argp/argp-help.c
@@ -800,63 +800,65 @@ hol_append (struct hol *hol, struct hol *more)
 
   /* Merge entries.  */
   if (more->num_entries > 0)
-    if (hol->num_entries == 0)
-      {
-	hol->num_entries = more->num_entries;
-	hol->entries = more->entries;
-	hol->short_options = more->short_options;
-	more->num_entries = 0;	/* Mark MORE's fields as invalid.  */
-      }
-    else
-      /* Append the entries in MORE to those in HOL, taking care to only add
-	 non-shadowed SHORT_OPTIONS values.  */
-      {
-	unsigned left;
-	char *so, *more_so;
-	struct hol_entry *e;
-	unsigned num_entries = hol->num_entries + more->num_entries;
-	struct hol_entry *entries =
-	  malloc (num_entries * sizeof (struct hol_entry));
-	unsigned hol_so_len = strlen (hol->short_options);
-	char *short_options =
-	  malloc (hol_so_len + strlen (more->short_options) + 1);
-
-	__mempcpy (__mempcpy (entries, hol->entries,
-			      hol->num_entries * sizeof (struct hol_entry)),
-		   more->entries,
-		   more->num_entries * sizeof (struct hol_entry));
-
-	__mempcpy (short_options, hol->short_options, hol_so_len);
+    {
+      if (hol->num_entries == 0)
+	{
+	  hol->num_entries = more->num_entries;
+	  hol->entries = more->entries;
+	  hol->short_options = more->short_options;
+	  more->num_entries = 0;	/* Mark MORE's fields as invalid.  */
+	}
+      else
+	/* Append the entries in MORE to those in HOL, taking care to only add
+	   non-shadowed SHORT_OPTIONS values.  */
+	{
+	  unsigned left;
+	  char *so, *more_so;
+	  struct hol_entry *e;
+	  unsigned num_entries = hol->num_entries + more->num_entries;
+	  struct hol_entry *entries =
+	    malloc (num_entries * sizeof (struct hol_entry));
+	  unsigned hol_so_len = strlen (hol->short_options);
+	  char *short_options =
+	    malloc (hol_so_len + strlen (more->short_options) + 1);
+
+	  __mempcpy (__mempcpy (entries, hol->entries,
+				hol->num_entries * sizeof (struct hol_entry)),
+		     more->entries,
+		     more->num_entries * sizeof (struct hol_entry));
+
+	  __mempcpy (short_options, hol->short_options, hol_so_len);
 
 	/* Fix up the short options pointers from HOL.  */
-	for (e = entries, left = hol->num_entries; left > 0; e++, left--)
-	  e->short_options += (short_options - hol->short_options);
+	  for (e = entries, left = hol->num_entries; left > 0; e++, left--)
+	    e->short_options += (short_options - hol->short_options);
 
 	/* Now add the short options from MORE, fixing up its entries too.  */
-	so = short_options + hol_so_len;
-	more_so = more->short_options;
-	for (left = more->num_entries; left > 0; e++, left--)
-	  {
-	    int opts_left;
-	    const struct argp_option *opt;
+	  so = short_options + hol_so_len;
+	  more_so = more->short_options;
+	  for (left = more->num_entries; left > 0; e++, left--)
+	    {
+	      int opts_left;
+	      const struct argp_option *opt;
 
-	    e->short_options = so;
+	      e->short_options = so;
 
-	    for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--)
-	      {
-		int ch = *more_so;
-		if (oshort (opt) && ch == opt->key)
-		  /* The next short option in MORE_SO, CH, is from OPT.  */
-		  {
-		    if (! find_char (ch, short_options,
-				     short_options + hol_so_len))
-		      /* The short option CH isn't shadowed by HOL's options,
-			 so add it to the sum.  */
-		      *so++ = ch;
-		    more_so++;
-		  }
-	      }
-	  }
+	      for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--)
+		{
+		  int ch = *more_so;
+		  if (oshort (opt) && ch == opt->key)
+		    /* The next short option in MORE_SO, CH, is from OPT.  */
+		    {
+		      if (! find_char (ch, short_options,
+				       short_options + hol_so_len))
+			/* The short option CH isn't shadowed by HOL's options,
+			   so add it to the sum.  */
+			*so++ = ch;
+		      more_so++;
+		    }
+		}
+	    }
+	}
 
 	*so = '\0';
 
@@ -900,10 +902,14 @@ arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt,
      const char *domain, argp_fmtstream_t stream)
 {
   if (real->arg)
-    if (real->flags & OPTION_ARG_OPTIONAL)
-      __argp_fmtstream_printf (stream, opt_fmt, dgettext (domain, real->arg));
-    else
-      __argp_fmtstream_printf (stream, req_fmt, dgettext (domain, real->arg));
+    {
+      if (real->flags & OPTION_ARG_OPTIONAL)
+	__argp_fmtstream_printf (stream, opt_fmt,
+				 dgettext (domain, real->arg));
+      else
+	__argp_fmtstream_printf (stream, req_fmt,
+				 dgettext (domain, real->arg));
+    }
 }
 
 /* Helper functions for hol_entry_help.  */
@@ -1245,16 +1251,18 @@ usage_long_opt (const struct argp_option *opt,
     arg = real->arg;
 
   if (! (flags & OPTION_NO_USAGE))
-    if (arg)
-      {
-	arg = dgettext (domain, arg);
-	if (flags & OPTION_ARG_OPTIONAL)
-	  __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg);
-	else
-	  __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg);
-      }
-    else
-      __argp_fmtstream_printf (stream, " [--%s]", opt->name);
+    {
+      if (arg)
+	{
+	  arg = dgettext (domain, arg);
+	  if (flags & OPTION_ARG_OPTIONAL)
+	    __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg);
+	  else
+	    __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg);
+	}
+      else
+	__argp_fmtstream_printf (stream, " [--%s]", opt->name);
+    }
 
   return 0;
 }
@@ -1385,16 +1393,18 @@ argp_args_usage (const struct argp *argp, const struct argp_state *state,
       advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream);
 
   if (advance && multiple)
-    /* Need to increment our level.  */
-    if (*nl)
-      /* There's more we can do here.  */
-      {
-	(*our_level)++;
-	advance = 0;		/* Our parent shouldn't advance also. */
-      }
-    else if (*our_level > 0)
-      /* We had multiple levels, but used them up; reset to zero.  */
-      *our_level = 0;
+    {
+      /* Need to increment our level.  */
+      if (*nl)
+	/* There's more we can do here.  */
+	{
+	  (*our_level)++;
+	  advance = 0;		/* Our parent shouldn't advance also. */
+	}
+      else if (*our_level > 0)
+	/* We had multiple levels, but used them up; reset to zero.  */
+	*our_level = 0;
+    }
 
   return !advance;
 }
diff --git a/argp/argp-parse.c b/argp/argp-parse.c
index e2ddd6d361..e59f614a05 100644
--- a/argp/argp-parse.c
+++ b/argp/argp-parse.c
@@ -605,39 +605,43 @@ parser_finalize (struct parser *parser,
     err = 0;
 
   if (! err)
-    if (parser->state.next == parser->state.argc)
-      /* We successfully parsed all arguments!  Call all the parsers again,
-	 just a few more times... */
-      {
-	for (group = parser->groups;
-	     group < parser->egroup && (!err || err==EBADKEY);
-	     group++)
-	  if (group->args_processed == 0)
-	    err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0);
-	for (group = parser->groups;
-	     group < parser->egroup && (!err || err==EBADKEY);
-	     group++)
-	  err = group_parse (group, &parser->state, ARGP_KEY_END, 0);
-
-	if (err == EBADKEY)
-	  err = 0;		/* Some parser didn't understand.  */
-
-	/* Tell the user that all arguments are parsed.  */
-	if (end_index)
-	  *end_index = parser->state.next;
-      }
-    else if (end_index)
-      /* Return any remaining arguments to the user.  */
-      *end_index = parser->state.next;
-    else
-      /* No way to return the remaining arguments, they must be bogus. */
-      {
-	if (!(parser->state.flags & ARGP_NO_ERRS) && parser->state.err_stream)
-	  fprintf (parser->state.err_stream,
-		   dgettext (parser->argp->argp_domain,
-			     "%s: Too many arguments\n"), parser->state.name);
-	err = EBADKEY;
-      }
+    {
+      if (parser->state.next == parser->state.argc)
+	/* We successfully parsed all arguments!  Call all the parsers again,
+	   just a few more times... */
+	{
+	  for (group = parser->groups;
+	       group < parser->egroup && (!err || err==EBADKEY);
+	       group++)
+	    if (group->args_processed == 0)
+	      err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0);
+	  for (group = parser->groups;
+	       group < parser->egroup && (!err || err==EBADKEY);
+	       group++)
+	    err = group_parse (group, &parser->state, ARGP_KEY_END, 0);
+
+	  if (err == EBADKEY)
+	    err = 0;		/* Some parser didn't understand.  */
+
+	  /* Tell the user that all arguments are parsed.  */
+	  if (end_index)
+	    *end_index = parser->state.next;
+	}
+      else if (end_index)
+	/* Return any remaining arguments to the user.  */
+	*end_index = parser->state.next;
+      else
+	/* No way to return the remaining arguments, they must be bogus. */
+	{
+	  if (!(parser->state.flags & ARGP_NO_ERRS)
+	      && parser->state.err_stream)
+	    fprintf (parser->state.err_stream,
+		     dgettext (parser->argp->argp_domain,
+			       "%s: Too many arguments\n"),
+		     parser->state.name);
+	  err = EBADKEY;
+	}
+    }
 
   /* Okay, we're all done, with either an error or success; call the parsers
      to indicate which one.  */
@@ -849,20 +853,22 @@ parser_parse_next (struct parser *parser, int *arg_ebadkey)
     opt = KEY_END;
 
   if (opt == KEY_END)
-    /* We're past what getopt considers the options.  */
-    if (parser->state.next >= parser->state.argc
-	|| (parser->state.flags & ARGP_NO_ARGS))
-      /* Indicate that we're done.  */
-      {
-	*arg_ebadkey = 1;
-	return EBADKEY;
-      }
-    else
-      /* A non-option arg; simulate what getopt might have done.  */
-      {
-	opt = KEY_ARG;
-	optarg = parser->state.argv[parser->state.next++];
-      }
+    {
+      /* We're past what getopt considers the options.  */
+      if (parser->state.next >= parser->state.argc
+	  || (parser->state.flags & ARGP_NO_ARGS))
+	/* Indicate that we're done.  */
+	{
+	  *arg_ebadkey = 1;
+	  return EBADKEY;
+	}
+      else
+	/* A non-option arg; simulate what getopt might have done.  */
+	{
+	  opt = KEY_ARG;
+	  optarg = parser->state.argv[parser->state.next++];
+	}
+    }
 
   if (opt == KEY_ARG)
     /* A non-option argument; try each parser in turn.  */