libbb: add forgotten file from previous commit :(
[oweals/busybox.git] / networking / ipcalc.c
index 909373cbb234b6bc018529e356ff8cc45905b9f2..d8fa5f3f2fa224998ecd76fd2d3609c821002c09 100644 (file)
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include "busybox.h"
-#include <ctype.h>
-#include <getopt.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 
+#include "libbb.h"
+
 #define CLASS_A_NETMASK        ntohl(0xFF000000)
 #define CLASS_B_NETMASK        ntohl(0xFFFF0000)
 #define CLASS_C_NETMASK        ntohl(0xFFFFFF00)
@@ -36,14 +35,14 @@ static unsigned long get_netmask(unsigned long ipaddr)
                return 0;
 }
 
-#ifdef CONFIG_FEATURE_IPCALC_FANCY
+#if ENABLE_FEATURE_IPCALC_FANCY
 static int get_prefix(unsigned long netmask)
 {
        unsigned long msk = 0x80000000;
        int ret = 0;
 
        netmask = htonl(netmask);
-       while(msk) {
+       while (msk) {
                if (netmask & msk)
                        ret++;
                msk >>= 1;
@@ -63,20 +62,19 @@ int get_prefix(unsigned long netmask);
 #define SILENT    0x20
 
 #if ENABLE_FEATURE_IPCALC_LONG_OPTIONS
-       static const struct option long_options[] = {
-               {"netmask",             no_argument, NULL, 'm'},
-               {"broadcast",   no_argument, NULL, 'b'},
-               {"network",             no_argument, NULL, 'n'},
-#ifdef CONFIG_FEATURE_IPCALC_FANCY
-               {"prefix",              no_argument, NULL, 'p'},
-               {"hostname",    no_argument, NULL, 'h'},
-               {"silent",              no_argument, NULL, 's'},
-#endif
-               {NULL, 0, NULL, 0}
-       };
-#else
-#define long_options 0
+       static const char ipcalc_longopts[] ALIGN1 =
+               "netmask\0"   No_argument "m"
+               "broadcast\0" No_argument "b"
+               "network\0"   No_argument "n"
+# if ENABLE_FEATURE_IPCALC_FANCY
+               "prefix\0"    No_argument "p"
+               "hostname\0"  No_argument "h"
+               "silent\0"    No_argument "s"
+# endif
+               ;
 #endif
+
+int ipcalc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int ipcalc_main(int argc, char **argv)
 {
        unsigned opt;
@@ -85,10 +83,10 @@ int ipcalc_main(int argc, char **argv)
        struct in_addr a;
        char *ipstr;
 
-       if (ENABLE_FEATURE_IPCALC_LONG_OPTIONS)
-               applet_long_options = long_options;
-
-       opt = getopt32(argc, argv, "mbn" USE_FEATURE_IPCALC_FANCY("phs"));
+#if ENABLE_FEATURE_IPCALC_LONG_OPTIONS
+       applet_long_options = ipcalc_longopts;
+#endif
+       opt = getopt32(argv, "mbn" USE_FEATURE_IPCALC_FANCY("phs"));
        argc -= optind;
        argv += optind;
        if (opt & (BROADCAST | NETWORK | NETPREFIX)) {
@@ -177,15 +175,12 @@ int ipcalc_main(int argc, char **argv)
 
                if (opt & HOSTNAME) {
                        struct hostent *hostinfo;
-                       int x;
 
                        hostinfo = gethostbyaddr((char *) &ipaddr, sizeof(ipaddr), AF_INET);
                        if (!hostinfo) {
                                bb_herror_msg_and_die("cannot find hostname for %s", argv[0]);
                        }
-                       for (x = 0; hostinfo->h_name[x]; x++) {
-                               hostinfo->h_name[x] = tolower(hostinfo->h_name[x]);
-                       }
+                       str_tolower(hostinfo->h_name);
 
                        printf("HOSTNAME=%s\n", hostinfo->h_name);
                }