1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <stdlib.h> 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <string.h> 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <limits.h> 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "args.h" 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifdef _MSC_VER 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define snprintf _snprintf 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(__GNUC__) && __GNUC__ 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern void die(const char *fmt, ...) __attribute__((noreturn)); 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern void die(const char *fmt, ...); 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct arg arg_init(char **argv) { 296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct arg a; 306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org a.argv = argv; 326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org a.argv_step = 1; 336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org a.name = NULL; 346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org a.val = NULL; 356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org a.def = NULL; 366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return a; 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint arg_match(struct arg *arg_, const struct arg_def *def, char **argv) { 406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct arg arg; 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!argv[0] || argv[0][0] != '-') 436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg = arg_init(argv); 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (def->short_name 486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org && strlen(arg.argv[0]) == strlen(def->short_name) + 1 496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org && !strcmp(arg.argv[0] + 1, def->short_name)) { 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.name = arg.argv[0] + 1; 526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.val = def->has_val ? arg.argv[1] : NULL; 536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.argv_step = def->has_val ? 2 : 1; 546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else if (def->long_name) { 556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const size_t name_len = strlen(def->long_name); 566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (strlen(arg.argv[0]) >= name_len + 2 586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org && arg.argv[0][1] == '-' 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org && !strncmp(arg.argv[0] + 2, def->long_name, name_len) 606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org && (arg.argv[0][name_len + 2] == '=' 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org || arg.argv[0][name_len + 2] == '\0')) { 626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.name = arg.argv[0] + 2; 646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.val = arg.name[name_len] == '=' ? arg.name + name_len + 1 : NULL; 656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.argv_step = 1; 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg.name && !arg.val && def->has_val) 706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Error: option %s requires argument.\n", arg.name); 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg.name && arg.val && !def->has_val) 736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Error: option %s requires no argument.\n", arg.name); 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg.name 766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org && (arg.val || !def->has_val)) { 776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg.def = def; 786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org *arg_ = arg; 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 1; 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgconst char *arg_next(struct arg *arg) { 876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->argv[0]) 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg->argv += arg->argv_step; 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return *arg->argv; 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgchar **argv_dup(int argc, const char **argv) { 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char **new_argv = malloc((argc + 1) * sizeof(*argv)); 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org memcpy(new_argv, argv, argc * sizeof(*argv)); 986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org new_argv[argc] = NULL; 996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return new_argv; 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid arg_show_usage(FILE *fp, const struct arg_def *const *defs) { 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char option_text[40] = {0}; 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org for (; *defs; defs++) { 1076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const struct arg_def *def = *defs; 1086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *short_val = def->has_val ? " <arg>" : ""; 1096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *long_val = def->has_val ? "=<arg>" : ""; 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (def->short_name && def->long_name) { 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *comma = def->has_val ? "," : ", "; 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org snprintf(option_text, 37, "-%s%s%s --%s%6s", 1156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org def->short_name, short_val, comma, 1166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org def->long_name, long_val); 1176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else if (def->short_name) 1186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org snprintf(option_text, 37, "-%s%s", 1196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org def->short_name, short_val); 1206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else if (def->long_name) 1216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org snprintf(option_text, 37, " --%s%s", 1226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org def->long_name, long_val); 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org fprintf(fp, " %-37s\t%s\n", option_text, def->desc); 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (def->enums) { 1276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const struct arg_enum_list *listptr; 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org fprintf(fp, " %-37s\t ", ""); 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org for (listptr = def->enums; listptr->name; listptr++) 1326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org fprintf(fp, "%s%s", listptr->name, 1336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org listptr[1].name ? ", " : "\n"); 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 1356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgunsigned int arg_parse_uint(const struct arg *arg) { 1406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org long int rawval; 1416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *endptr; 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rawval = strtol(arg->val, &endptr, 10); 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->val[0] != '\0' && endptr[0] == '\0') { 1466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (rawval >= 0 && rawval <= UINT_MAX) 1476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return rawval; 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Option %s: Value %ld out of range for unsigned int\n", 1506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg->name, rawval); 1516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Option %s: Invalid character '%c'\n", arg->name, *endptr); 1546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint arg_parse_int(const struct arg *arg) { 1596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org long int rawval; 1606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *endptr; 161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rawval = strtol(arg->val, &endptr, 10); 163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->val[0] != '\0' && endptr[0] == '\0') { 1656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (rawval >= INT_MIN && rawval <= INT_MAX) 1666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return rawval; 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Option %s: Value %ld out of range for signed int\n", 1696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg->name, rawval); 1706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Option %s: Invalid character '%c'\n", arg->name, *endptr); 1736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct vpx_rational { 1786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int num; /**< fraction numerator */ 1796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int den; /**< fraction denominator */ 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}; 1816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct vpx_rational arg_parse_rational(const struct arg *arg) { 1826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org long int rawval; 1836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *endptr; 1846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct vpx_rational rat; 1856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* parse numerator */ 1876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rawval = strtol(arg->val, &endptr, 10); 1886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->val[0] != '\0' && endptr[0] == '/') { 1906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (rawval >= INT_MIN && rawval <= INT_MAX) 1916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rat.num = rawval; 1926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else die("Option %s: Value %ld out of range for signed int\n", 1936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg->name, rawval); 1946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else die("Option %s: Expected / at '%c'\n", arg->name, *endptr); 1956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* parse denominator */ 1976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rawval = strtol(endptr + 1, &endptr, 10); 1986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->val[0] != '\0' && endptr[0] == '\0') { 2006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (rawval >= INT_MIN && rawval <= INT_MAX) 2016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rat.den = rawval; 2026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else die("Option %s: Value %ld out of range for signed int\n", 2036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org arg->name, rawval); 2046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else die("Option %s: Invalid character '%c'\n", arg->name, *endptr); 2056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return rat; 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint arg_parse_enum(const struct arg *arg) { 2116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const struct arg_enum_list *listptr; 2126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org long int rawval; 2136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *endptr; 214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* First see if the value can be parsed as a raw value */ 2166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rawval = strtol(arg->val, &endptr, 10); 2176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->val[0] != '\0' && endptr[0] == '\0') { 2186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* Got a raw value, make sure it's valid */ 2196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org for (listptr = arg->def->enums; listptr->name; listptr++) 2206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (listptr->val == rawval) 2216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return rawval; 2226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* Next see if it can be parsed as a string */ 2256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org for (listptr = arg->def->enums; listptr->name; listptr++) 2266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!strcmp(arg->val, listptr->name)) 2276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return listptr->val; 2286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org die("Option %s: Invalid value '%s'\n", arg->name, arg->val); 2306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint arg_parse_enum_or_int(const struct arg *arg) { 2356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (arg->def->enums) 2366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return arg_parse_enum(arg); 2376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return arg_parse_int(arg); 238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 239