Hi, I'm sending a patch for fcoeadm, which fixes broken support of long options. Only some long options are supported currently. See: https://bugzilla.redhat.com/show_bug.cgi?id=498551
After aplying this patch, all types of options supported by getopt_long will be also supported by fcoeadm. The patch has been made againts 1.0.7 of fcoe-utils, but it should apply fine to current code. Please let me know if there is anything wrong with it. Signed-off-by: Jan Zeleny <[email protected]> --- --- fcoe-utils-1.0.7/fcoeadm.c 2009-05-04 11:29:00.000000000 +0200 +++ fcoe-utils-1.0.7/fcoeadm.c.longOptions 2009-05-05 17:34:37.000000000 +0200 @@ -44,7 +44,7 @@ static struct option fcoeadm_opts[] = { {"create", 1, 0, 'c'}, {"destroy", 1, 0, 'd'}, {"reset", 1, 0, 'r'}, - {"interface", 1, 0, 'a'}, + {"interface", 1, 0, 'i'}, {"target", 1, 0, 't'}, {"lun", 1, 0, 'l'}, {"stats", 1, 0, 's'}, @@ -449,44 +449,45 @@ int main(int argc, char *argv[]) case 'c': if ((argc < 2 || argc > 3) || strnlen(optarg, MAX_ARG_LEN) > (IFNAMSIZ - 1) || - ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2)) + ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2 && argv[1][1] != '-')) goto error; rc = fcoeadm_create(optarg); goto done; case 'd': if ((argc < 2 || argc > 3) || strnlen(optarg, MAX_ARG_LEN) > (IFNAMSIZ - 1) || - ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2)) + ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2 && argv[1][1] != '-')) goto error; rc = fcoeadm_destroy(optarg); goto done; case 'r': if ((argc < 2 || argc > 3) || strnlen(optarg, MAX_ARG_LEN) > (IFNAMSIZ - 1) || - ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2)) + ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2 && argv[1][1] != '-')) goto error; rc = fcoeadm_reset(optarg); goto done; case 'i': - if (argc < 2 || argc > 3) + if (argc < 2 || argc > 3 || + (argc == 3 && strnlen(argv[1], MAX_ARG_LEN) > 2 && + (argv[1][1] != '-' || strchr(argv[1],'=') != NULL))) goto error; s = NULL; - if (argc == 2 && argv[optind]) { - if (strnlen(argv[optind], MAX_ARG_LEN) > - (IFNAMSIZ - 1)) - goto error; - if (strnlen(argv[optind], MAX_ARG_LEN) > 2) - s = argv[optind] + 2; - } - if (argc == 3) { - if ((optind == 1) && - strnlen(argv[1], MAX_ARG_LEN) > 2) - goto error; - s = argv[optind]; - } - if (s) + if (argc == 2) { + if (argv[1][1] == '-') + s = strchr(argv[1],'=')+1; + else + s = argv[1]+2; + } + else { + s = argv[2]; + } + if (s) { + if (strnlen(s,MAX_ARG_LEN) > (IFNAMSIZ - 1)) + goto error; strncpy(opt_info->ifname, s, sizeof(opt_info->ifname)); + } if (strnlen(opt_info->ifname, IFNAMSIZ - 1)) { if (fcoeadm_validate_interface( opt_info->ifname, @@ -497,21 +498,26 @@ int main(int argc, char *argv[]) rc = fcoeadm_display_adapter_info(opt_info); goto done; case 't': - if ((argc < 2 || argc > 3) || - (argv[1] && - strnlen(argv[1], MAX_ARG_LEN) > (IFNAMSIZ - 1)) || - (argv[2] && - strnlen(argv[2], MAX_ARG_LEN) > (IFNAMSIZ - 1))) + if (argc < 2 || argc > 3 || + (argc == 3 && strnlen(argv[1], MAX_ARG_LEN) > 2 && + (argv[1][1] != '-' || strchr(argv[1],'=') != NULL))) goto error; - if (strnlen(argv[1], MAX_ARG_LEN) > 2) { - if (argc >= 3) - goto error; - strncpy(opt_info->ifname, argv[1] + 2, - sizeof(opt_info->ifname)); - } - if (argv[2]) - strncpy(opt_info->ifname, argv[2], + s = NULL; + if (argc == 2) { + if (argv[1][1] == '-') + s = strchr(argv[1],'=')+1; + else + s = argv[1]+2; + } + else { + s = argv[2]; + } + if (s) { + if (strnlen(s,MAX_ARG_LEN) > (IFNAMSIZ - 1)) + goto error; + strncpy(opt_info->ifname, s, sizeof(opt_info->ifname)); + } if (strnlen(opt_info->ifname, IFNAMSIZ - 1)) { if (fcoeadm_validate_interface( opt_info->ifname, _______________________________________________ devel mailing list [email protected] http://www.open-fcoe.org/mailman/listinfo/devel
