From 823b636cd14d337ebb8766c5c181737fb3860b42 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Wed, 7 Apr 2010 19:16:12 +0200 Subject: ipcalc: more correct checking for proper number of arguments function old new delta ipcalc_main 581 569 -12 Signed-off-by: Steve Bennett Signed-off-by: Denys Vlasenko --- networking/ipcalc.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/networking/ipcalc.c b/networking/ipcalc.c index 7855849..17b2163 100644 --- a/networking/ipcalc.c +++ b/networking/ipcalc.c @@ -63,13 +63,13 @@ int get_prefix(unsigned long netmask); #if ENABLE_FEATURE_IPCALC_LONG_OPTIONS static const char ipcalc_longopts[] ALIGN1 = - "netmask\0" No_argument "m" - "broadcast\0" No_argument "b" - "network\0" No_argument "n" + "netmask\0" No_argument "m" // netmask from IP (assuming complete class A, B, or C network) + "broadcast\0" No_argument "b" // broadcast from IP [netmask] + "network\0" No_argument "n" // network from IP [netmask] # if ENABLE_FEATURE_IPCALC_FANCY - "prefix\0" No_argument "p" - "hostname\0" No_argument "h" - "silent\0" No_argument "s" + "prefix\0" No_argument "p" // prefix from IP[/prefix] [netmask] + "hostname\0" No_argument "h" // hostname from IP + "silent\0" No_argument "s" // don’t ever display error messages # endif ; #endif @@ -92,15 +92,16 @@ int ipcalc_main(int argc UNUSED_PARAM, char **argv) #if ENABLE_FEATURE_IPCALC_LONG_OPTIONS applet_long_options = ipcalc_longopts; #endif + opt_complementary = "-1:?2"; /* minimum 1 arg, maximum 2 args */ opt = getopt32(argv, "mbn" IF_FEATURE_IPCALC_FANCY("phs")); argv += optind; if (opt & SILENT) logmode = LOGMODE_NONE; /* suppress error_msg() output */ - if (opt & (BROADCAST | NETWORK | NETPREFIX)) { - if (!argv[0] || !argv[1] || argv[2]) - bb_show_usage(); - } else { - if (!argv[0] || argv[1]) + opt &= ~SILENT; + if (!(opt & (BROADCAST | NETWORK | NETPREFIX))) { + /* if no options at all or + * (no broadcast,network,prefix) and (two args)... */ + if (!opt || argv[1]) bb_show_usage(); } -- cgit v1.1