[PATCH] lib: fwts_args: handle cases to set optarg_handler when using long options.
Deborah McLemore
debmc at us.ibm.com
Wed Mar 23 10:08:20 UTC 2016
Will fix and revise patch.
=====================================
Deb McLemore
IBM OpenPower - IBM Systems
(512) 286 9980
debmc at us.ibm.com
debmc at linux.vnet.ibm.com - (plain text)
=====================================
From: Alex Hung <alex.hung at canonical.com>
To: fwts-devel at lists.ubuntu.com
Date: 03/22/2016 10:36 PM
Subject: Re: [PATCH] lib: fwts_args: handle cases to set optarg_handler
when using long options.
Sent by: fwts-devel-bounces at lists.ubuntu.com
On 2016-03-23 06:29 AM, Deb McLemore wrote:
> This fix properly searches the options tables based on the number of
options in each option table iteration
> to find the proper optarg_handler to be called to handle the long option
from getopt_long.
>
> Signed-off-by: Deb McLemore <debmc at linux.vnet.ibm.com>
> ---
> src/lib/src/fwts_args.c | 33 ++++++++++++++++++---------------
> 1 file changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/src/lib/src/fwts_args.c b/src/lib/src/fwts_args.c
> index 43c8ee8..a0e43d8 100644
> --- a/src/lib/src/fwts_args.c
> +++ b/src/lib/src/fwts_args.c
> @@ -1,5 +1,6 @@
> /*
> * Copyright (C) 2011-2016 Canonical
> + * Some of this work - Copyright (C) 2016 IBM
> *
> * This program is free software; you can redistribute it and/or
> * modify it under the terms of the GNU General Public License
> @@ -102,6 +103,8 @@ int fwts_args_parse(fwts_framework *fw, const int
argc, char * const argv[])
> int i;
> int c;
> int option_index;
> + int master_option_index;
> + int translated_long_option_index;
> int ret = FWTS_OK;
> char *short_options = NULL;
> size_t short_options_len = 0;
> @@ -162,6 +165,8 @@ int fwts_args_parse(fwts_framework *fw, const int
argc, char * const argv[])
> }
>
> for (;;) {
> + master_option_index = total_options;
> + translated_long_option_index = 0;
> c = getopt_long(argc, argv, short_options,
long_options, &option_index);
> if (c == -1)
> break;
> @@ -170,38 +175,36 @@ int fwts_args_parse(fwts_framework *fw, const int
argc, char * const argv[])
> bool found = false;
>
> if (c != 0) {
> - for (i=0;
i<options_table->num_options; i++, n++) {
> + for (i=0;
i<options_table->num_options; i++) {
> char
*short_name = options_table->options[i].short_name;
> if (index
(short_name, c) != NULL) {
>
found = true;
>
break;
> }
> }
> - } else if (options_table->num_options
> option_index)
> - found = true;
> + } else { /* c is zero for long option
cases but we need the right optarg_handler set */
> + for (i=0;
i<options_table->num_options; i++) {
> + if
(strcmp(options_table->options[i].long_name,long_options
[option_index].name) == 0) {
> +
translated_long_option_index = i;
> +
found = true;
> +
break;
> + }
> + }
There is an extra indentation for the for loop.
> + }
>
> /* Found an option, then run the
appropriate handler */
> if (found) {
> - ret = options_table->
optarg_handler(fw, argc, argv, c, option_index);
> + ret = options_table->
optarg_handler(fw, argc, argv, c, translated_long_option_index);
> if (ret != FWTS_OK)
> goto exit;
> break;
> } else {
> - option_index -=
options_table->num_options;
> + master_option_index -=
options_table->num_options;
> }
> - }
> - }
> -
> - /* We've collected all the args, now sanity check the values */
>
> - fwts_list_foreach(item, &options_list) {
> - options_table = fwts_list_data(fwts_options_table
*, item);
> - if (options_table->optarg_check != NULL) {
> - ret = options_table->optarg_check(fw);
> - if (ret != FWTS_OK)
> - break;
> }
> }
> +
> exit:
> free(short_options);
> free(long_options);
>
--
fwts-devel mailing list
fwts-devel at lists.ubuntu.com
Modify settings or unsubscribe at:
https://lists.ubuntu.com/mailman/listinfo/fwts-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20160323/8107c0ff/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20160323/8107c0ff/attachment-0001.gif>
More information about the fwts-devel
mailing list