From: Steve Bennett Date: Wed, 7 Apr 2010 17:16:12 +0000 (+0200) Subject: ipcalc: more correct checking for proper number of arguments X-Git-Tag: 1_17_0~300 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=823b636cd14d337ebb8766c5c181737fb3860b42;p=oweals%2Fbusybox.git 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 --- diff --git a/networking/ipcalc.c b/networking/ipcalc.c index 78558495e..17b216354 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(); }