diff options
Diffstat (limited to 'src/foodopts.c')
| -rw-r--r-- | src/foodopts.c | 39 | 
1 files changed, 37 insertions, 2 deletions
| diff --git a/src/foodopts.c b/src/foodopts.c index 338b97e..fac807d 100644 --- a/src/foodopts.c +++ b/src/foodopts.c @@ -1,14 +1,49 @@  #include <stdio.h> +#include <stdlib.h>  #include "foodopts.h" +static struct option * +to_getopt_longopts(const struct foodoption * src) +{ +  int l = 0; +  while( src[l].name    != 0 +      || src[l].has_arg != 0 +      || src[l].flag    != 0 +      || src[l].val     != 0) { +    l++; +  } + +  struct option * dst = (struct option *)malloc(sizeof(struct option) * (l + 1)); +  int i = 0; +  while( src[i].name    != 0 +      || src[i].has_arg != 0 +      || src[i].flag    != 0 +      || src[i].val     != 0) { +    dst[i].name    = src[i].name; +    dst[i].has_arg = src[i].has_arg; +    dst[i].flag    = src[i].flag; +    dst[i].val     = src[i].val; +    i++; +  } +  dst[i].name    = 0; +  dst[i].has_arg = 0; +  dst[i].flag    = 0; +  dst[i].val     = 0; + +  return dst; +} +  int  get_foodopt(int argc, char *const argv[],              const char *optstring,              const struct foodoption *longopts,              int *longindex)  { -  return getopt_long(argc, argv, optstring, -                     (struct option *)longopts, longindex); +  struct option * o = to_getopt_longopts(longopts); +  int rc = getopt_long(argc, argv, optstring, o, longindex); + +  free(o); +  return rc;  }  const char * | 
