Steve Ma wrote:
> fcoeadm --interface without providing any additional arguments
> results in an error:
> ./fcoeadm: option '--interface' requires an argument
> However, fcoeadm -i displays all the interfaces correctly.
>
> There are two problems:
> 1) --interface option is not specified to have optional argument,
> in {"interface", 1, 0, 'i'} of fcoeadm_options.
> 2) The code to parse the --interface option under case 'i' are
> incorrect.
>
> This patch is to fix these two problems by replaing
> {"interface", 1, 0, 'i'} by {"interface", 2, 0, 'i'} in fcoeadm_options
> to allow --interface to have optional arguments. Secondly,
> check the return pointer of s in "case 'i' in case it is NULL.
>
>
>
> Signed-off-by: Steve Ma <[email protected]>
> ---
>
> fcoeadm.c | 10 ++++++----
> 1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/fcoeadm.c b/fcoeadm.c
> index 6b63e17..2e44b34 100644
> --- a/fcoeadm.c
> +++ b/fcoeadm.c
> @@ -43,7 +43,7 @@ static struct option fcoeadm_opts[] = {
> {"create", 1, 0, 'c'},
> {"destroy", 1, 0, 'd'},
> {"reset", 1, 0, 'r'},
> - {"interface", 1, 0, 'i'},
> + {"interface", 2, 0, 'i'},
> {"target", 2, 0, 't'},
> {"lun", 2, 0, 'l'},
> {"stats", 1, 0, 's'},
> @@ -477,9 +477,11 @@ int main(int argc, char *argv[])
> goto error;
> s = NULL;
> if (argc == 2) {
> - if (argv[1][1] == '-')
> - s = strchr(argv[1], '=')+1;
> - else
> + if (argv[1][1] == '-') {
> + s = strchr(argv[1], '=');
> + if (s)
> + s += 1;
> + } else
> s = argv[1]+2;
> } else
> s = argv[2];
Can't you just set s = optarg (declared extern char *optarg) instead?
See man 3 getopt. All of this parsing should be done by getopt for you.
Joe
_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel