util/amdfwtool/amdfwread: Fix incorrect option index

index I/O argument to getopt_long is not the index to argv. Instead it
is an index into the optlong array corresponding to the parsed option.
Also getopt() uses a global variable optind to track the index of the
next argument to be processed. Use the optindex variable as an index to
extract the filename from argv.

BUG=None
TEST=Build and use amdfwread to read the Soft-fuse bits from Guybrush
BIOS image. Observed no changes before and after the changes.

Change-Id: I33c74a0c8e12c5af76954524cf7294b7541d286b
Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/66553
Reviewed-by: Robert Zieba <robertzieba@google.com>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Karthikeyan Ramasubramanian 2022-08-08 14:30:03 -06:00 committed by Martin L Roth
parent 7dd42da9a0
commit 0dd3cf4534
1 changed files with 5 additions and 6 deletions

View File

@ -179,19 +179,18 @@ int main(int argc, char **argv)
char *fw_file = NULL; char *fw_file = NULL;
int selected_functions = 0; int selected_functions = 0;
int index = 0;
while (1) { while (1) {
int opt = getopt_long(argc, argv, optstring, long_options, &index); int opt = getopt_long(argc, argv, optstring, long_options, NULL);
if (opt == -1) { if (opt == -1) {
index++; if (optind != (argc - 1)) {
if (index >= argc) { /* Print usage if one and only one option i.e. filename is
/* Print usage if we didn't get any arguments */ not found. */
print_usage(); print_usage();
return 0; return 0;
} }
fw_file = argv[index]; fw_file = argv[optind];
break; break;
} }