diff options
-rw-r--r-- | ethtool.c | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -324,6 +324,7 @@ typedef enum { CMDL_NONE, CMDL_BOOL, CMDL_INT, + CMDL_UINT, CMDL_STR, } cmdline_type_t; @@ -404,18 +405,32 @@ static struct cmdline_info cmdline_coalesce[] = { static int get_int(char *str, int base) { - unsigned long v; + long v; char *endp; if (!str) show_usage(1); errno = 0; - v = strtoul(str, &endp, base); + v = strtol(str, &endp, base); if ( errno || *endp || v > INT_MAX) show_usage(1); return (int)v; } +static int get_uint(char *str, int base) +{ + unsigned long v; + char *endp; + + if (!str) + show_usage(1); + errno = 0; + v = strtoul(str, &endp, base); + if ( errno || *endp || v > UINT_MAX) + show_usage(1); + return v; +} + static void parse_generic_cmdline(int argc, char **argp, int first_arg, int *changed, struct cmdline_info *info, @@ -447,6 +462,10 @@ static void parse_generic_cmdline(int argc, char **argp, *p = get_int(argp[i],0); break; } + case CMDL_UINT: { + *p = get_uint(argp[i],0); + break; + } case CMDL_STR: { char **s = info[idx].wanted_val; *s = strdup(argp[i]); |