* [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() @ 2011-02-21 19:16 Ben Hutchings 2011-02-21 19:17 ` [PATCH ethtool 1/5] ethtool: Split show_usage() into two functions Ben Hutchings ` (4 more replies) 0 siblings, 5 replies; 11+ messages in thread From: Ben Hutchings @ 2011-02-21 19:16 UTC (permalink / raw) To: netdev Every command-line tool needs a --version option, right? And while looking at the existing option parsing and usage messages I found and fixed some bugs. Ben. Ben Hutchings (5): ethtool: Split show_usage() into two functions ethtool: Report an error if given an unrecognised option ethtool: Allow for long options with no short option and without a device name ethtool: Indent the no-options usage line consistently with the others ethtool: Add --version option ethtool.8.in | 5 ++ ethtool.c | 165 +++++++++++++++++++++++++++++++-------------------------- 2 files changed, 95 insertions(+), 75 deletions(-) -- 1.7.3.4 -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH ethtool 1/5] ethtool: Split show_usage() into two functions 2011-02-21 19:16 [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() Ben Hutchings @ 2011-02-21 19:17 ` Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 2/5] ethtool: Report an error if given an unrecognised option Ben Hutchings ` (3 subsequent siblings) 4 siblings, 0 replies; 11+ messages in thread From: Ben Hutchings @ 2011-02-21 19:17 UTC (permalink / raw) To: netdev show_usage(0) and show_usage(1) now do unrelated things; split it into show_usage() and exit_bad_args(). Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> --- ethtool.c | 144 +++++++++++++++++++++++++++++++------------------------------ 1 files changed, 73 insertions(+), 71 deletions(-) diff --git a/ethtool.c b/ethtool.c index f680b6d..b9422d3 100644 --- a/ethtool.c +++ b/ethtool.c @@ -268,32 +268,32 @@ static struct option { }; -static void show_usage(int badarg) __attribute__((noreturn)); +static void exit_bad_args(void) __attribute__((noreturn)); -static void show_usage(int badarg) +static void exit_bad_args(void) +{ + fprintf(stderr, + "ethtool: bad command line argument(s)\n" + "For more information run ethtool -h\n"); + exit(1); +} + +static void show_usage(void) { int i; - if (badarg != 0) { - fprintf(stderr, - "ethtool: bad command line argument(s)\n" - "For more information run ethtool -h\n" - ); - } - else { - /* ethtool -h */ - fprintf(stdout, PACKAGE " version " VERSION "\n"); - fprintf(stdout, + + /* ethtool -h */ + fprintf(stdout, PACKAGE " version " VERSION "\n"); + fprintf(stdout, "Usage:\n" "ethtool DEVNAME\tDisplay standard information about device\n"); - for (i = 0; args[i].srt; i++) { - fprintf(stdout, " ethtool %s|%s %s\t%s\n%s", - args[i].srt, args[i].lng, - strstr(args[i].srt, "-h") ? "\t" : "DEVNAME", - args[i].help, - args[i].opthelp ? args[i].opthelp : ""); - } + for (i = 0; args[i].srt; i++) { + fprintf(stdout, " ethtool %s|%s %s\t%s\n%s", + args[i].srt, args[i].lng, + strstr(args[i].srt, "-h") ? "\t" : "DEVNAME", + args[i].help, + args[i].opthelp ? args[i].opthelp : ""); } - exit(badarg); } static char *devname = NULL; @@ -612,11 +612,11 @@ get_int_range(char *str, int base, long long min, long long max) char *endp; if (!str) - show_usage(1); + exit_bad_args(); errno = 0; v = strtoll(str, &endp, base); if (errno || *endp || v < min || v > max) - show_usage(1); + exit_bad_args(); return v; } @@ -627,11 +627,11 @@ get_uint_range(char *str, int base, unsigned long long max) char *endp; if (!str) - show_usage(1); + exit_bad_args(); errno = 0; v = strtoull(str, &endp, base); if ( errno || *endp || v > max) - show_usage(1); + exit_bad_args(); return v; } @@ -664,7 +664,7 @@ static void parse_generic_cmdline(int argc, char **argp, *(int *)info[idx].seen_val = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); switch (info[idx].type) { case CMDL_BOOL: { int *p = info[idx].wanted_val; @@ -673,7 +673,7 @@ static void parse_generic_cmdline(int argc, char **argp, else if (!strcmp(argp[i], "off")) *p = 0; else - show_usage(1); + exit_bad_args(); break; } case CMDL_S32: { @@ -712,7 +712,7 @@ static void parse_generic_cmdline(int argc, char **argp, u32 *p = info[idx].wanted_val; struct in_addr in; if (!inet_aton(argp[i], &in)) - show_usage(1); + exit_bad_args(); *p = in.s_addr; break; } @@ -728,7 +728,7 @@ static void parse_generic_cmdline(int argc, char **argp, p = info[idx].wanted_val; *p |= info[idx].flag_val; } else if (strcmp(argp[i], "off")) { - show_usage(1); + exit_bad_args(); } break; } @@ -738,13 +738,13 @@ static void parse_generic_cmdline(int argc, char **argp, break; } default: - show_usage(1); + exit_bad_args(); } break; } } if( !found) - show_usage(1); + exit_bad_args(); } } @@ -808,10 +808,12 @@ static void parse_cmdline(int argc, char **argp) break; } if (mode == MODE_HELP || - (!args[k].srt && argp[i][0] == '-')) - show_usage(0); - else + (!args[k].srt && argp[i][0] == '-')) { + show_usage(); + exit(0); + } else { devname = argp[i]; + } break; case 2: if ((mode == MODE_SSET) || @@ -850,7 +852,7 @@ static void parse_cmdline(int argc, char **argp) } else if (!strcmp(argp[i], "offline")) { test_type = OFFLINE; } else { - show_usage(1); + exit_bad_args(); } break; } else if (mode == MODE_PHYS_ID) { @@ -923,14 +925,14 @@ static void parse_cmdline(int argc, char **argp) if (!strcmp(argp[i], "flow-type")) { i += 1; if (i >= argc) { - show_usage(1); + exit_bad_args(); break; } parse_rxntupleopts(argc, argp, i); i = argc; break; } else { - show_usage(1); + exit_bad_args(); } break; } @@ -938,54 +940,54 @@ static void parse_cmdline(int argc, char **argp) if (!strcmp(argp[i], "rx-flow-hash")) { i += 1; if (i >= argc) { - show_usage(1); + exit_bad_args(); break; } rx_fhash_get = rxflow_str_to_type(argp[i]); if (!rx_fhash_get) - show_usage(1); + exit_bad_args(); } else - show_usage(1); + exit_bad_args(); break; } if (mode == MODE_FLASHDEV) { flash_region = strtol(argp[i], NULL, 0); if ((flash_region < 0)) - show_usage(1); + exit_bad_args(); break; } if (mode == MODE_SNFC) { if (!strcmp(argp[i], "rx-flow-hash")) { i += 1; if (i >= argc) { - show_usage(1); + exit_bad_args(); break; } rx_fhash_set = rxflow_str_to_type(argp[i]); if (!rx_fhash_set) { - show_usage(1); + exit_bad_args(); break; } i += 1; if (i >= argc) { - show_usage(1); + exit_bad_args(); break; } if (parse_rxfhashopts(argp[i], &rx_fhash_val) < 0) - show_usage(1); + exit_bad_args(); else rx_fhash_changed = 1; } else - show_usage(1); + exit_bad_args(); break; } if (mode == MODE_SRXFHINDIR) { if (!strcmp(argp[i], "equal")) { if (argc != i + 2) { - show_usage(1); + exit_bad_args(); break; } i += 1; @@ -996,42 +998,42 @@ static void parse_cmdline(int argc, char **argp) } else if (!strcmp(argp[i], "weight")) { i += 1; if (i >= argc) { - show_usage(1); + exit_bad_args(); break; } rxfhindir_weight = argp + i; i = argc; } else { - show_usage(1); + exit_bad_args(); } break; } if (mode != MODE_SSET) - show_usage(1); + exit_bad_args(); if (!strcmp(argp[i], "speed")) { gset_changed = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); speed_wanted = get_int(argp[i],10); break; } else if (!strcmp(argp[i], "duplex")) { gset_changed = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); if (!strcmp(argp[i], "half")) duplex_wanted = DUPLEX_HALF; else if (!strcmp(argp[i], "full")) duplex_wanted = DUPLEX_FULL; else - show_usage(1); + exit_bad_args(); break; } else if (!strcmp(argp[i], "port")) { gset_changed = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); if (!strcmp(argp[i], "tp")) port_wanted = PORT_TP; else if (!strcmp(argp[i], "aui")) @@ -1043,12 +1045,12 @@ static void parse_cmdline(int argc, char **argp) else if (!strcmp(argp[i], "fibre")) port_wanted = PORT_FIBRE; else - show_usage(1); + exit_bad_args(); break; } else if (!strcmp(argp[i], "autoneg")) { i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); if (!strcmp(argp[i], "on")) { gset_changed = 1; autoneg_wanted = AUTONEG_ENABLE; @@ -1056,56 +1058,56 @@ static void parse_cmdline(int argc, char **argp) gset_changed = 1; autoneg_wanted = AUTONEG_DISABLE; } else { - show_usage(1); + exit_bad_args(); } break; } else if (!strcmp(argp[i], "advertise")) { gset_changed = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); advertising_wanted = get_int(argp[i], 16); break; } else if (!strcmp(argp[i], "phyad")) { gset_changed = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); phyad_wanted = get_int(argp[i], 0); break; } else if (!strcmp(argp[i], "xcvr")) { gset_changed = 1; i += 1; if (i >= argc) - show_usage(1); + exit_bad_args(); if (!strcmp(argp[i], "internal")) xcvr_wanted = XCVR_INTERNAL; else if (!strcmp(argp[i], "external")) xcvr_wanted = XCVR_EXTERNAL; else - show_usage(1); + exit_bad_args(); break; } else if (!strcmp(argp[i], "wol")) { gwol_changed = 1; i++; if (i >= argc) - show_usage(1); + exit_bad_args(); if (parse_wolopts(argp[i], &wol_wanted) < 0) - show_usage(1); + exit_bad_args(); wol_change = 1; break; } else if (!strcmp(argp[i], "sopass")) { gwol_changed = 1; i++; if (i >= argc) - show_usage(1); + exit_bad_args(); get_mac_addr(argp[i], sopass_wanted); sopass_change = 1; break; } else if (!strcmp(argp[i], "msglvl")) { i++; if (i >= argc) - show_usage(1); + exit_bad_args(); if (isdigit((unsigned char)argp[i][0])) { msglvl_changed = 1; msglvl_mask = ~0; @@ -1122,7 +1124,7 @@ static void parse_cmdline(int argc, char **argp) } break; } - show_usage(1); + exit_bad_args(); } } @@ -1159,9 +1161,9 @@ static void parse_cmdline(int argc, char **argp) } if (devname == NULL) - show_usage(1); + exit_bad_args(); if (strlen(devname) >= IFNAMSIZ) - show_usage(1); + exit_bad_args(); } static void dump_supported(struct ethtool_cmd *ep) @@ -1512,7 +1514,7 @@ static void get_mac_addr(char *src, unsigned char *dest) count = sscanf(src, "%2x:%2x:%2x:%2x:%2x:%2x", &buf[0], &buf[1], &buf[2], &buf[3], &buf[4], &buf[5]); if (count != ETH_ALEN) - show_usage(1); + exit_bad_args(); for (i = 0; i < count; i++) { dest[i] = buf[i]; @@ -3026,7 +3028,7 @@ static int do_srxfhindir(int fd, struct ifreq *ifr) int err; if (!rxfhindir_equal && !rxfhindir_weight) - show_usage(1); + exit_bad_args(); indir_head.cmd = ETHTOOL_GRXFHINDIR; indir_head.size = 0; @@ -3094,7 +3096,7 @@ static int do_flash(int fd, struct ifreq *ifr) if (flash < 0) { fprintf(stdout, "Missing filename argument\n"); - show_usage(1); + exit_bad_args(); return 98; } @@ -3160,7 +3162,7 @@ static int do_srxntuple(int fd, struct ifreq *ifr) if (err < 0) perror("Cannot add new RX n-tuple filter"); } else { - show_usage(1); + exit_bad_args(); } return 0; -- 1.7.3.4 -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH ethtool 2/5] ethtool: Report an error if given an unrecognised option 2011-02-21 19:16 [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() Ben Hutchings 2011-02-21 19:17 ` [PATCH ethtool 1/5] ethtool: Split show_usage() into two functions Ben Hutchings @ 2011-02-21 19:18 ` Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 3/5] ethtool: Allow for long options with no short option and without a device name Ben Hutchings ` (2 subsequent siblings) 4 siblings, 0 replies; 11+ messages in thread From: Ben Hutchings @ 2011-02-21 19:18 UTC (permalink / raw) To: netdev Previously we would print full usage information and return 0. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> --- ethtool.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ethtool.c b/ethtool.c index b9422d3..d28f1b2 100644 --- a/ethtool.c +++ b/ethtool.c @@ -807,10 +807,11 @@ static void parse_cmdline(int argc, char **argp) mode = args[k].Mode; break; } - if (mode == MODE_HELP || - (!args[k].srt && argp[i][0] == '-')) { + if (mode == MODE_HELP) { show_usage(); exit(0); + } else if (!args[k].srt && argp[i][0] == '-') { + exit_bad_args(); } else { devname = argp[i]; } -- 1.7.3.4 -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH ethtool 3/5] ethtool: Allow for long options with no short option and without a device name 2011-02-21 19:16 [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() Ben Hutchings 2011-02-21 19:17 ` [PATCH ethtool 1/5] ethtool: Split show_usage() into two functions Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 2/5] ethtool: Report an error if given an unrecognised option Ben Hutchings @ 2011-02-21 19:18 ` Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 4/5] ethtool: Indent the no-options usage line consistently with the others Ben Hutchings 2011-02-21 19:19 ` [PATCH ethtool 5/5] ethtool: Add --version option Ben Hutchings 4 siblings, 0 replies; 11+ messages in thread From: Ben Hutchings @ 2011-02-21 19:18 UTC (permalink / raw) To: netdev Change loop conditions to check for a long option string. Generalise check for whether option requires a device name. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> --- ethtool.c | 23 ++++++++++++++--------- 1 files changed, 14 insertions(+), 9 deletions(-) diff --git a/ethtool.c b/ethtool.c index d28f1b2..8246bda 100644 --- a/ethtool.c +++ b/ethtool.c @@ -287,12 +287,16 @@ static void show_usage(void) fprintf(stdout, "Usage:\n" "ethtool DEVNAME\tDisplay standard information about device\n"); - for (i = 0; args[i].srt; i++) { - fprintf(stdout, " ethtool %s|%s %s\t%s\n%s", - args[i].srt, args[i].lng, - strstr(args[i].srt, "-h") ? "\t" : "DEVNAME", - args[i].help, - args[i].opthelp ? args[i].opthelp : ""); + for (i = 0; args[i].lng; i++) { + fputs(" ethtool ", stdout); + if (args[i].srt) + fprintf(stdout, "%s|", args[i].srt); + fprintf(stdout, "%s %s\t%s\n", + args[i].lng, + args[i].Mode < 0 ? "\t" : "DEVNAME", + args[i].help); + if (args[i].opthelp) + fputs(args[i].opthelp, stdout); } } @@ -801,8 +805,9 @@ static void parse_cmdline(int argc, char **argp) for (i = 1; i < argc; i++) { switch (i) { case 1: - for (k = 0; args[k].srt; k++) - if (!strcmp(argp[i], args[k].srt) || + for (k = 0; args[k].lng; k++) + if ((args[k].srt && + !strcmp(argp[i], args[k].srt)) || !strcmp(argp[i], args[k].lng)) { mode = args[k].Mode; break; @@ -810,7 +815,7 @@ static void parse_cmdline(int argc, char **argp) if (mode == MODE_HELP) { show_usage(); exit(0); - } else if (!args[k].srt && argp[i][0] == '-') { + } else if (!args[k].lng && argp[i][0] == '-') { exit_bad_args(); } else { devname = argp[i]; -- 1.7.3.4 -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH ethtool 4/5] ethtool: Indent the no-options usage line consistently with the others 2011-02-21 19:16 [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() Ben Hutchings ` (2 preceding siblings ...) 2011-02-21 19:18 ` [PATCH ethtool 3/5] ethtool: Allow for long options with no short option and without a device name Ben Hutchings @ 2011-02-21 19:18 ` Ben Hutchings 2011-02-21 19:19 ` [PATCH ethtool 5/5] ethtool: Add --version option Ben Hutchings 4 siblings, 0 replies; 11+ messages in thread From: Ben Hutchings @ 2011-02-21 19:18 UTC (permalink / raw) To: netdev Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> --- ethtool.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/ethtool.c b/ethtool.c index 8246bda..32a97f6 100644 --- a/ethtool.c +++ b/ethtool.c @@ -286,7 +286,8 @@ static void show_usage(void) fprintf(stdout, PACKAGE " version " VERSION "\n"); fprintf(stdout, "Usage:\n" - "ethtool DEVNAME\tDisplay standard information about device\n"); + " ethtool DEVNAME\t" + "Display standard information about device\n"); for (i = 0; args[i].lng; i++) { fputs(" ethtool ", stdout); if (args[i].srt) -- 1.7.3.4 -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH ethtool 5/5] ethtool: Add --version option 2011-02-21 19:16 [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() Ben Hutchings ` (3 preceding siblings ...) 2011-02-21 19:18 ` [PATCH ethtool 4/5] ethtool: Indent the no-options usage line consistently with the others Ben Hutchings @ 2011-02-21 19:19 ` Ben Hutchings 2011-02-22 6:16 ` Stephen Hemminger 4 siblings, 1 reply; 11+ messages in thread From: Ben Hutchings @ 2011-02-21 19:19 UTC (permalink / raw) To: netdev Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> --- ethtool.8.in | 5 +++++ ethtool.c | 6 ++++++ 2 files changed, 11 insertions(+), 0 deletions(-) diff --git a/ethtool.8.in b/ethtool.8.in index 133825b..8b04335 100644 --- a/ethtool.8.in +++ b/ethtool.8.in @@ -100,6 +100,8 @@ ethtool \- query or control network driver and hardware settings .B ethtool \-h|\-\-help +.B ethtool \-\-version + .B ethtool \-a|\-\-show\-pause .I ethX @@ -310,6 +312,9 @@ settings of the specified device. .B \-h \-\-help Shows a short help message. .TP +.B \-\-version +Shows the ethtool version number. +.TP .B \-a \-\-show\-pause Queries the specified Ethernet device for pause parameter information. .TP diff --git a/ethtool.c b/ethtool.c index 32a97f6..e9cb2c9 100644 --- a/ethtool.c +++ b/ethtool.c @@ -115,6 +115,7 @@ static int do_permaddr(int fd, struct ifreq *ifr); static int send_ioctl(int fd, struct ifreq *ifr); static enum { + MODE_VERSION = -2, MODE_HELP = -1, MODE_GSET=0, MODE_SSET, @@ -264,6 +265,7 @@ static struct option { { "-P", "--show-permaddr", MODE_PERMADDR, "Show permanent hardware address" }, { "-h", "--help", MODE_HELP, "Show this help" }, + { NULL, "--version", MODE_VERSION, "Show version number" }, {} }; @@ -816,6 +818,10 @@ static void parse_cmdline(int argc, char **argp) if (mode == MODE_HELP) { show_usage(); exit(0); + } else if (mode == MODE_VERSION) { + fprintf(stdout, + PACKAGE " version " VERSION "\n"); + exit(0); } else if (!args[k].lng && argp[i][0] == '-') { exit_bad_args(); } else { -- 1.7.3.4 -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH ethtool 5/5] ethtool: Add --version option 2011-02-21 19:19 ` [PATCH ethtool 5/5] ethtool: Add --version option Ben Hutchings @ 2011-02-22 6:16 ` Stephen Hemminger 2011-02-22 12:37 ` Ben Hutchings 0 siblings, 1 reply; 11+ messages in thread From: Stephen Hemminger @ 2011-02-22 6:16 UTC (permalink / raw) To: Ben Hutchings; +Cc: netdev > Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> > --- ethtool.8.in | 5 +++++ > ethtool.c | 6 ++++++ > 2 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/ethtool.8.in b/ethtool.8.in > index 133825b..8b04335 100644 > --- a/ethtool.8.in > +++ b/ethtool.8.in > @@ -100,6 +100,8 @@ ethtool \- query or control network driver and > hardware settings > > .B ethtool \-h|\-\-help > > +.B ethtool \-\-version > + .B ethtool \-a|\-\-show\-pause > .I ethX > > @@ -310,6 +312,9 @@ settings of the specified device. > .B \-h \-\-help > Shows a short help message. > .TP +.B \-\-version > +Shows the ethtool version number. > +.TP .B \-a \-\-show\-pause > Queries the specified Ethernet device for pause parameter information. > .TP diff --git a/ethtool.c b/ethtool.c > index 32a97f6..e9cb2c9 100644 > --- a/ethtool.c > +++ b/ethtool.c > @@ -115,6 +115,7 @@ static int do_permaddr(int fd, struct ifreq *ifr); > static int send_ioctl(int fd, struct ifreq *ifr); > > static enum { > + MODE_VERSION = -2, > MODE_HELP = -1, > MODE_GSET=0, MODE_SSET, > @@ -264,6 +265,7 @@ static struct option { > { "-P", "--show-permaddr", MODE_PERMADDR, > "Show permanent hardware address" }, > { "-h", "--help", MODE_HELP, "Show this help" }, > + { NULL, "--version", MODE_VERSION, "Show version number" }, The standard convention is to use -V for short form of version option. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH ethtool 5/5] ethtool: Add --version option 2011-02-22 6:16 ` Stephen Hemminger @ 2011-02-22 12:37 ` Ben Hutchings 2011-02-22 13:05 ` Eric Dumazet 0 siblings, 1 reply; 11+ messages in thread From: Ben Hutchings @ 2011-02-22 12:37 UTC (permalink / raw) To: Stephen Hemminger; +Cc: netdev On Mon, 2011-02-21 at 22:16 -0800, Stephen Hemminger wrote: [...] > The standard convention is to use -V for short form of version option. This is not anywhere near standard. $ cp -V cp: invalid option -- 'V' Try `cp --help' for more information. $ bash -V bash: -V: invalid option [...] $ emacs -V [opens window] $ vim -V chdir(/usr/share/vim) fchdir() to previous dir sourcing "$VIM/vimrc" [...looks like that meant 'verbose'...] Ben. -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH ethtool 5/5] ethtool: Add --version option 2011-02-22 12:37 ` Ben Hutchings @ 2011-02-22 13:05 ` Eric Dumazet 2011-02-22 21:35 ` Jeff Garzik 0 siblings, 1 reply; 11+ messages in thread From: Eric Dumazet @ 2011-02-22 13:05 UTC (permalink / raw) To: Ben Hutchings; +Cc: Stephen Hemminger, netdev Le mardi 22 février 2011 à 12:37 +0000, Ben Hutchings a écrit : > On Mon, 2011-02-21 at 22:16 -0800, Stephen Hemminger wrote: > [...] > > The standard convention is to use -V for short form of version option. > > This is not anywhere near standard. > > $ cp -V > cp: invalid option -- 'V' > Try `cp --help' for more information. > $ bash -V > bash: -V: invalid option > [...] > $ emacs -V > [opens window] > $ vim -V > chdir(/usr/share/vim) > fchdir() to previous dir > sourcing "$VIM/vimrc" > [...looks like that meant 'verbose'...] Now try with networking tools, many use -V (As a matter of fact, ethtool -h already is used to display help) # ping -V ping utility, iputils-sss20071127 # tc -V tc utility, iproute2-ss100823 # ssh -V OpenSSH_5.1p1 Debian-5, OpenSSL 0.9.8g 19 Oct 2007 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH ethtool 5/5] ethtool: Add --version option 2011-02-22 13:05 ` Eric Dumazet @ 2011-02-22 21:35 ` Jeff Garzik 2011-02-22 21:49 ` Ben Hutchings 0 siblings, 1 reply; 11+ messages in thread From: Jeff Garzik @ 2011-02-22 21:35 UTC (permalink / raw) To: Ben Hutchings; +Cc: Eric Dumazet, Stephen Hemminger, netdev On 02/22/2011 08:05 AM, Eric Dumazet wrote: > Le mardi 22 février 2011 à 12:37 +0000, Ben Hutchings a écrit : >> On Mon, 2011-02-21 at 22:16 -0800, Stephen Hemminger wrote: >> [...] >>> The standard convention is to use -V for short form of version option. >> >> This is not anywhere near standard. >> >> $ cp -V >> cp: invalid option -- 'V' >> Try `cp --help' for more information. >> $ bash -V >> bash: -V: invalid option >> [...] >> $ emacs -V >> [opens window] >> $ vim -V >> chdir(/usr/share/vim) >> fchdir() to previous dir >> sourcing "$VIM/vimrc" >> [...looks like that meant 'verbose'...] > > Now try with networking tools, many use -V > > (As a matter of fact, ethtool -h already is used to display help) > > # ping -V > ping utility, iputils-sss20071127 > # tc -V > tc utility, iproute2-ss100823 > # ssh -V > OpenSSH_5.1p1 Debian-5, OpenSSL 0.9.8g 19 Oct 2007 Stephen is correct, "-V" is a common standard (but by no means universal). The following is what using argp ("info argp") generates for any program by default: > Usage: myprog [OPTION...] > myprog - a program that does something > > [...] > > -?, --help Give this help list > --usage Give a short usage message > -V, --version Print program version > > Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Regards, Jeff ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH ethtool 5/5] ethtool: Add --version option 2011-02-22 21:35 ` Jeff Garzik @ 2011-02-22 21:49 ` Ben Hutchings 0 siblings, 0 replies; 11+ messages in thread From: Ben Hutchings @ 2011-02-22 21:49 UTC (permalink / raw) To: Jeff Garzik; +Cc: Eric Dumazet, Stephen Hemminger, netdev On Tue, 2011-02-22 at 16:35 -0500, Jeff Garzik wrote: > On 02/22/2011 08:05 AM, Eric Dumazet wrote: > > Le mardi 22 février 2011 à 12:37 +0000, Ben Hutchings a écrit : > >> On Mon, 2011-02-21 at 22:16 -0800, Stephen Hemminger wrote: > >> [...] > >>> The standard convention is to use -V for short form of version option. > >> > >> This is not anywhere near standard. > >> > >> $ cp -V > >> cp: invalid option -- 'V' > >> Try `cp --help' for more information. > >> $ bash -V > >> bash: -V: invalid option > >> [...] > >> $ emacs -V > >> [opens window] > >> $ vim -V > >> chdir(/usr/share/vim) > >> fchdir() to previous dir > >> sourcing "$VIM/vimrc" > >> [...looks like that meant 'verbose'...] > > > > Now try with networking tools, many use -V > > > > (As a matter of fact, ethtool -h already is used to display help) > > > > # ping -V > > ping utility, iputils-sss20071127 > > # tc -V > > tc utility, iproute2-ss100823 > > # ssh -V > > OpenSSH_5.1p1 Debian-5, OpenSSL 0.9.8g 19 Oct 2007 > > Stephen is correct, "-V" is a common standard (but by no means > universal). The following is what using argp ("info argp") generates > for any program by default: [...] Well, it's my bikeshed now. :-) I don't think it's worth using one of the few remaining letters on this. Ben. -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2011-02-22 21:49 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-02-21 19:16 [PATCH ethtool 0/5] Add --version option and fix some bugs in show_usage() Ben Hutchings 2011-02-21 19:17 ` [PATCH ethtool 1/5] ethtool: Split show_usage() into two functions Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 2/5] ethtool: Report an error if given an unrecognised option Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 3/5] ethtool: Allow for long options with no short option and without a device name Ben Hutchings 2011-02-21 19:18 ` [PATCH ethtool 4/5] ethtool: Indent the no-options usage line consistently with the others Ben Hutchings 2011-02-21 19:19 ` [PATCH ethtool 5/5] ethtool: Add --version option Ben Hutchings 2011-02-22 6:16 ` Stephen Hemminger 2011-02-22 12:37 ` Ben Hutchings 2011-02-22 13:05 ` Eric Dumazet 2011-02-22 21:35 ` Jeff Garzik 2011-02-22 21:49 ` Ben Hutchings
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).