[patch] Fix optional arguments in getopt.

Peter Rosin peda@lysator.liu.se
Mon Feb 11 21:17:00 GMT 2008


Hi!

I noticed that the getopt implementation does not handle optional
arguments very well. E.g. ./foo --listen, where listen is an optional
long argument, is interpreted to have an isten argument. Also, it is
broken if other short options precede an optional short option. I.e.
when -l is optional, ./foo -l works, but ./foo -il does not.

Here is a small fix for that, please apply...

I'm not on the list, please CC me. Thanks!

Cheers,
Peter



	* libc/stdlib/getopt.c (getopt_internal): Handle optional
	arguments better for long options and short options not
	appearing as the first option in a sequence.


--- newlib/libc/stdlib/getopt.c	2008-02-04 11:21:50.242125000 +0100
+++ newlib/libc/stdlib/getopt.c	2008-02-04 11:25:11.867125000 +0100
@@ -308,13 +308,8 @@
     case OPTIONAL_ARG:
       if (*possible_arg == '=')
         possible_arg++;
-      if (*possible_arg != '\0')
-        {
-          optarg = possible_arg;
-          optwhere = 1;
-        }
-      else
-        optarg = NULL;
+      optarg = (*possible_arg != '\0') ? possible_arg : NULL;
+      optwhere = 1;
       break;
     case REQUIRED_ARG:
       if (*possible_arg == '=')



More information about the Newlib mailing list