From: Andrew Cooper Date: Thu, 2 Mar 2017 17:01:34 +0000 (+0000) Subject: tools/insn-fuzz: Use getopt() for parsing the command line X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~2444 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6a6f3ff2c1254e2ed11a285cb9f4ecf6fe129acd;p=xen.git tools/insn-fuzz: Use getopt() for parsing the command line Signed-off-by: Andrew Cooper Reviewed-by: Wei Liu --- diff --git a/tools/fuzz/x86_instruction_emulator/afl-harness.c b/tools/fuzz/x86_instruction_emulator/afl-harness.c index 16edbd6bab..102566c22d 100644 --- a/tools/fuzz/x86_instruction_emulator/afl-harness.c +++ b/tools/fuzz/x86_instruction_emulator/afl-harness.c @@ -3,6 +3,7 @@ #include #include #include +#include extern int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size); extern unsigned int fuzz_minimal_input_size(void); @@ -17,16 +18,43 @@ int main(int argc, char **argv) setbuf(stdout, NULL); - if ( argc != 2 ) + while ( 1 ) { - printf("Expecting only one argument\n"); - exit(-1); + enum { + OPT_MIN_SIZE, + }; + static const struct option lopts[] = { + { "min-input-size", no_argument, NULL, OPT_MIN_SIZE }, + { 0, 0, 0, 0 } + }; + int c = getopt_long_only(argc, argv, "", lopts, NULL); + + if ( c == -1 ) + break; + + switch ( c ) + { + case OPT_MIN_SIZE: + printf("%u\n", fuzz_minimal_input_size()); + exit(0); + break; + + case '?': + printf("Usage: %s $FILE | [--min-input-size]\n", argv[0]); + exit(-1); + break; + + default: + printf("Bad getopt return %d (%c)\n", c, c); + exit(-1); + break; + } } - if ( !strcmp(argv[1], "--min-input-size") ) + if ( optind != (argc - 1) ) { - printf("%u\n", fuzz_minimal_input_size()); - exit(0); + printf("Expecting only one argument\n"); + exit(-1); } fp = fopen(argv[1], "rb");