1 /*
2 * Copyright 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "FuncFuzzerUtils.h"
18 #include <getopt.h>
19
20 namespace android {
21 namespace vts {
22
usage()23 static void usage() {
24 fprintf(
25 stdout,
26 "Usage:\n"
27 "\n"
28 "./<fuzzer> <vts flags> -- <libfuzzer flags>\n"
29 "\n"
30 "VTS flags (strictly in form --flag=value):\n"
31 "\n"
32 " vts_target_func \tName of function to be fuzzed.\n"
33 "\n"
34 "libfuzzer flags (strictly in form -flag=value):\n"
35 " Use -help=1 to see libfuzzer flags\n"
36 "Example:\n"
37 "./<fuzzer_name> --vts_target_func=\"foo\" -- -max_len=128 -runs=100\n"
38 "\n");
39 }
40
41 static struct option long_options[] = {
42 {"help", no_argument, 0, 'h'},
43 {"vts_target_function", required_argument, 0, 't'}
44 };
45
46
ExtractFuncFuzzerParams(int argc,char ** argv)47 FuncFuzzerParams ExtractFuncFuzzerParams(int argc, char **argv) {
48 FuncFuzzerParams params;
49 int opt = 0;
50 int index = 0;
51 while ((opt = getopt_long_only(argc, argv, "", long_options, &index)) != -1) {
52 switch (opt) {
53 case 'h':
54 usage();
55 exit(0);
56 case 't':
57 params.target_func_ = optarg;
58 break;
59 default:
60 // Ignore. This option will be handled by libfuzzer.
61 break;
62 }
63 }
64 return params;
65 }
66
67 } // namespace vts
68 } // namespace android
69
70