Looks good overall! I've got a few nits, below.
On Fri, Nov 24, 2000 at 06:46:25PM -0500, Greg Hudson wrote:
>...
> - char *const *argv;
> + char **argv;
Um. I don't think we can do this with argv. I'm surprised that it isn't
"const char * const * argv".
Certainly, if we make a copy of the array (of pointers), then we could have
"const char **argv" and that would allow us to permute.
>...
> -typedef struct apr_getopt_long_t apr_getopt_long_t;
> +typedef struct apr_option_t apr_option_t;
>
> -/* structure representing a single longopt */
> -struct apr_getopt_long_t {
> - /** the name of the long argument (sans "--") */
> +struct apr_option_t {
I think the name "apr_option_t" is a bit too generic. The apr_getopt_ prefix
probably ought to remain.
>...
> @@ -106,7 +108,7 @@
> * @deffunc apr_status_t apr_initopt(apr_getopt_t **os, apr_pool_t *cont,int
> argc, char *const *argv)
> */
> APR_DECLARE(apr_status_t) apr_initopt(apr_getopt_t **os, apr_pool_t *cont,
> - int argc, char *const *argv);
> + int argc, char **argv);
This should be "const char * const * argv". We can make copies internally,
if we choose. The changing prototype will have an effect upon Apache, but
that isn't a problem... I can easily update those references.
[ there may be some test proggies in apr/test/ that would need changing, too ]
>...
> @@ -57,6 +58,8 @@
> (*os)->place = EMSG;
> (*os)->argc = argc;
> (*os)->argv = argv;
> + (*os)->interleave = 0;
> + (*os)->skip_start = (*os)->skip_end = (*os)->ind;
Can we simplify this and make it:
(*os)->skip_start = 1;
(*os)->skip_end = 1;
By using the other variable, then I need to look back to figure out just
what is going on. (and in this case, I didn't even have the context, so I
needed to bring up the file to see what the above line meant)
>...
> +static void reverse(char **argv, int start, int len)
> +{
> + char *temp;
Constify on the above two lines...
>...
> + else if (os->ind >= os->argc) /* Argument missing */
> + return cerr(os, "option requires an argument", *optch, APR_BADARG);
The error message is different from the similar error for long options.
Cheers,
-g
--
Greg Stein, http://www.lyra.org/