From 3e989a90491243fece9dc2cdca0a4409ce257012 Mon Sep 17 00:00:00 2001 From: "jani@rhols221.adsl.netsonic.fi" <> Date: Mon, 3 Jun 2002 03:02:32 +0300 Subject: Fixed two bugs in my_getopt. --- mysys/my_getopt.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'mysys/my_getopt.c') diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c index 76cdbede78d..12af811a0c8 100644 --- a/mysys/my_getopt.c +++ b/mysys/my_getopt.c @@ -68,7 +68,7 @@ int handle_options(int *argc, char ***argv, { uint opt_found, argvpos= 0, length, spec_len, i; my_bool end_of_options= 0, must_be_var, set_maximum_value, special_used, - option_is_loose; + option_is_loose, option_used= 0; char *progname= *(*argv), **pos, *optend, *prev_found; const struct my_option *optp; int error; @@ -84,6 +84,7 @@ int handle_options(int *argc, char ***argv, if (cur_arg[0] == '-' && cur_arg[1] && !end_of_options) /* must be opt */ { char *argument= 0; + option_used= 1; must_be_var= 0; set_maximum_value= 0; special_used= 0; @@ -336,7 +337,6 @@ int handle_options(int *argc, char ***argv, if (optp->var_type == GET_BOOL && optp->arg_type == NO_ARG) { *((my_bool*) optp->value)= (my_bool) 1; - (*argc)--; continue; // For GET_BOOL get_one_option() shouldn't be called } else if (optp->arg_type == REQUIRED_ARG || @@ -401,6 +401,12 @@ int handle_options(int *argc, char ***argv, else /* non-option found */ (*argv)[argvpos++]= cur_arg; } + /* Destroy the first, already handled option, so that programs that look + for arguments in 'argv', without checking 'argc', know when to stop. + Items in argv, before the destroyed one, are all non-option -arguments + to the program, yet to be (possibly) handled. */ + if (option_used) + (*argv)[argvpos]= 0; return 0; } -- cgit v1.2.1