Index: contrib/elftoolchain/elfcopy/main.c =================================================================== --- contrib/elftoolchain/elfcopy/main.c +++ contrib/elftoolchain/elfcopy/main.c @@ -1016,14 +1016,16 @@ elfcopy_usage(); } } + argc -= optind; + argv += optind; - if (optind == argc || optind + 2 < argc) + if (argc == 0 || argc > 2) elfcopy_usage(); - infile = argv[optind]; + infile = argv[0]; outfile = NULL; - if (optind + 1 < argc) - outfile = argv[optind + 1]; + if (argc > 1) + outfile = argv[1]; create_file(ecp, infile, outfile); } @@ -1066,8 +1068,10 @@ mcs_usage(); } } + argc -= optind; + argv += optind; - if (optind == argc) + if (argc == 0) mcs_usage(); /* Must specify one operation at least. */ @@ -1104,7 +1108,7 @@ sac->string = string; } - for (i = optind; i < argc; i++) { + for (i = 0; i < argc; i++) { /* If only -p is specified, output to /dev/null */ if (print && !append && !compress && !delete) create_file(ecp, argv[i], "/dev/null"); @@ -1179,16 +1183,18 @@ strip_usage(); } } + argc -= optind; + argv += optind; if (ecp->strip == 0 && ((ecp->flags & DISCARD_LOCAL) == 0) && ((ecp->flags & DISCARD_LLABEL) == 0) && lookup_symop_list(ecp, NULL, SYMOP_STRIP) == NULL) ecp->strip = STRIP_ALL; - if (optind == argc) + if (argc == 0) strip_usage(); - for (i = optind; i < argc; i++) + for (i = 0; i < argc; i++) create_file(ecp, argv[i], outfile); }