[Mesa-dev] [PATCH 2/5] intel: aubinator: use getopt to parse arguments
Gandikota, Sirisha
sirisha.gandikota at intel.com
Thu Oct 6 22:14:31 UTC 2016
>-----Original Message-----
>From: mesa-dev [mailto:mesa-dev-bounces at lists.freedesktop.org] On Behalf Of
>Lionel Landwerlin
>Sent: Wednesday, October 05, 2016 8:55 AM
>To: mesa-dev at lists.freedesktop.org
>Cc: Landwerlin, Lionel G <lionel.g.landwerlin at intel.com>
>Subject: [Mesa-dev] [PATCH 2/5] intel: aubinator: use getopt to parse arguments
>
>Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
>---
> src/intel/tools/aubinator.c | 90 +++++++++++++++++----------------------------
> 1 file changed, 33 insertions(+), 57 deletions(-)
>
>diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index
>b74885a..44a6bb2 100644
>--- a/src/intel/tools/aubinator.c
>+++ b/src/intel/tools/aubinator.c
>@@ -24,6 +24,7 @@
> #include <stdio.h>
> #include <stdlib.h>
> #include <stdint.h>
>+#include <getopt.h>
>
> #include <unistd.h>
> #include <fcntl.h>
>@@ -1040,30 +1041,13 @@ print_help(const char *progname, FILE *file)
> progname);
> }
>
>-static bool
>-is_prefix(const char *arg, const char *prefix, const char **value) -{
>- int l = strlen(prefix);
>-
>- if (strncmp(arg, prefix, l) == 0 && (arg[l] == '\0' || arg[l] == '=')) {
>- if (arg[l] == '=')
>- *value = arg + l + 1;
>- else
>- *value = NULL;
>-
>- return true;
>- }
>-
>- return false;
>-}
>-
> int main(int argc, char *argv[])
> {
> struct gen_spec *spec;
> struct aub_file *file;
>- int i;
>- bool found_arg_gen = false, pager = true;
>- const char *value, *input_file;
>+ int c, i;
>+ bool help = false, pager = true;
>+ const char *input_file = NULL;
> char gen_file[256], gen_val[24];
> const struct {
> const char *name;
>@@ -1080,55 +1064,47 @@ int main(int argc, char *argv[])
> { "kbl", 0x591D, 9, 0 }, /* Intel(R) Kabylake GT2 */
> { "bxt", 0x0A84, 9, 0 } /* Intel(R) HD Graphics (Broxton) */
> }, *gen = NULL;
>-
>- if (argc == 1) {
>- print_help(argv[0], stderr);
>- exit(EXIT_FAILURE);
>- }
>-
>- for (i = 1; i < argc; ++i) {
>- if (strcmp(argv[i], "--no-pager") == 0) {
>- pager = false;
>- } else if (strcmp(argv[i], "--no-offsets") == 0) {
>- option_print_offsets = false;
>- } else if (is_prefix(argv[i], "--gen", &value)) {
>- if (value == NULL) {
>- fprintf(stderr, "option '--gen' requires an argument\n");
>- exit(EXIT_FAILURE);
>- }
>- found_arg_gen = true;
>- snprintf(gen_val, sizeof(gen_val), "%s", value);
>- } else if (strcmp(argv[i], "--headers") == 0) {
>- option_full_decode = false;
>- } else if (is_prefix(argv[i], "--color", &value)) {
>- if (value == NULL || strcmp(value, "always") == 0)
>+ const struct option aubinator_opts[] = {
>+ { "help", no_argument, (int *) &help, true },
>+ { "no-pager", no_argument, (int *) &pager, false },
>+ { "no-offsets", no_argument, (int *) &option_print_offsets, false },
>+ { "gen", required_argument, NULL, 'g' },
>+ { "headers", no_argument, (int *) &option_full_decode, false },
>+ { "color", required_argument, NULL, 'c' },
>+ { NULL, 0, NULL, 0 }
>+ };
>+
>+ i = 0;
>+ while ((c = getopt_long(argc, argv, "", aubinator_opts, &i)) != -1) {
>+ switch (c) {
>+ case 'g':
>+ snprintf(gen_val, sizeof(gen_val), "%s", optarg);
>+ break;
>+ case 'c':
>+ if (optarg == NULL || strcmp(optarg, "always") == 0)
> option_color = COLOR_ALWAYS;
>- else if (strcmp(value, "never") == 0)
>+ else if (strcmp(optarg, "never") == 0)
> option_color = COLOR_NEVER;
>- else if (strcmp(value, "auto") == 0)
>+ else if (strcmp(optarg, "auto") == 0)
> option_color = COLOR_AUTO;
> else {
>- fprintf(stderr, "invalid value for --color: %s", value);
>+ fprintf(stderr, "invalid value for --color: %s", optarg);
> exit(EXIT_FAILURE);
> }
>- } else if (strcmp(argv[i], "--help") == 0) {
>- print_help(argv[0], stdout);
>- exit(EXIT_SUCCESS);
>- } else {
>- if (argv[i][0] == '-') {
>- fprintf(stderr, "unknown option %s\n", argv[i]);
>- exit(EXIT_FAILURE);
>- }
>- input_file = argv[i];
>+ break;
>+ default:
> break;
> }
> }
>
>- if (!found_arg_gen) {
>- fprintf(stderr, "argument --gen is required\n");
>- exit(EXIT_FAILURE);
>+ if (help || argc == 1) {
>+ print_help(argv[0], stderr);
>+ exit(0);
> }
>
>+ if (optind < argc)
>+ input_file = argv[optind];
>+
> for (i = 0; i < ARRAY_SIZE(gens); i++) {
> if (!strcmp(gen_val, gens[i].name)) {
> gen = &gens[i];
>--
>2.9.3
[SG] Works for me. Thanks for cleaning this up.
Reviewed-by: Sirisha Gandikota<Sirisha.gandikota at intel.com>
>_______________________________________________
>mesa-dev mailing list
>mesa-dev at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list