getopt_long

Gregory Pietsch gpietsch@comcast.net
Wed Nov 30 08:34:00 GMT 2005


The reason why I called it GETOPT_LONG_OPTION_T is because I thought 
"option" was too generic by itself.

I didn't put const in there because it's easier on me. If I want it to 
be a constant, I just don't modify it. ;-)

Gregory Pietsch

Shaun Jackman wrote:

>2005/11/28, Shaun Jackman <sjackman@gmail.com>:
>  
>
>>Thanks, Greg!
>>
>>I haven't tried it out yet, but on the theory that `something's almost
>>certainly better than nothing', I'd be all for checking this in and
>>debugging it through many public eyes.
>>
>>I'll give it a go tomorrow days.
>>    
>>
>
>I still haven't had a chance to run it. The embedded system I want to
>use this is in a state of disarray at the moment. However, it compiles
>nicely in newlib -- using the current getopt.h even -- with this
>slight modification.
>
>Cheers,
>Shaun
>
>--- libc/stdlib/getopt.c.orig	2005-11-29 14:18:47.000000000 -0700
>+++ libc/stdlib/getopt.c	2005-11-29 14:26:47.000000000 -0700
>@@ -30,8 +30,8 @@
>  --arg value
>
>  It takes the additional arguments longopts which is a pointer to the first
>-element of an array of type GETOPT_LONG_OPTION_T.  The last element of the
>-array has to be filled with NULL for the name field.
>+element of an array of type struct option.  The last element of the array
>+has to be filled with NULL for the name field.
>
>  The longind pointer points to the index of the current long option relative
>  to longopts if it is non-NULL.
>@@ -143,8 +143,8 @@
>
> /* getopt_internal:  the function that does all the dirty work */
> static int
>-getopt_internal (int argc, char **argv, char *shortopts,
>-                 GETOPT_LONG_OPTION_T * longopts, int *longind, int only)
>+getopt_internal (int argc, char **argv, const char *shortopts,
>+                 struct option *longopts, int *longind, int only)
> {
>   GETOPT_ORDERING_T ordering = PERMUTE;
>   static size_t optwhere = 0;
>@@ -157,6 +157,7 @@
>   int has_arg = -1;
>   char *cp;
>   int arg_next = 0;
>+  enum { NO_ARG, REQUIRED_ARG, OPTIONAL_ARG };
>
>   /* first, deal with silly parameters and easy stuff */
>   if (argc == 0 || argv == NULL || (shortopts == NULL && longopts == NULL))
>@@ -386,21 +387,21 @@
> }
>
> int
>-getopt (int argc, char **argv, char *optstring)
>+getopt (int argc, char *const argv[], const char *optstring)
> {
>   return getopt_internal (argc, argv, optstring, NULL, NULL, 0);
> }
>
> int
>-getopt_long (int argc, char **argv, char *shortopts,
>-             GETOPT_LONG_OPTION_T * longopts, int *longind)
>+getopt_long (int argc, char *const argv[], const char *shortopts,
>+             const struct option *longopts, int *longind)
> {
>   return getopt_internal (argc, argv, shortopts, longopts, longind, 0);
> }
>
> int
>-getopt_long_only (int argc, char **argv, char *shortopts,
>-                  GETOPT_LONG_OPTION_T * longopts, int *longind)
>+getopt_long_only (int argc, char *const argv[], const char *shortopts,
>+                  const struct option *longopts, int *longind)
> {
>   return getopt_internal (argc, argv, shortopts, longopts, longind, 1);
> }
>
>  
>



More information about the Newlib mailing list