networking/interface.c: get rid of global "smallint interface_opt_a"
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 5 Mar 2018 16:46:17 +0000 (17:46 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 5 Mar 2018 16:46:17 +0000 (17:46 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/libbb.h
networking/ifconfig.c
networking/interface.c

index f1ab1ca6f5ae449bbd521f425bfff031f6222574..fa878433eb15d208dd610c7cb8d77949cc80444c 100644 (file)
@@ -1367,7 +1367,7 @@ struct hwtype {
        int   FAST_FUNC (*activate)(int fd);
        int suppress_null_addr;
 };
-extern smallint interface_opt_a;
+#define IFNAME_SHOW_DOWNED_TOO ((char*)(intptr_t)1)
 int display_interfaces(char *ifname) FAST_FUNC;
 int in_ether(const char *bufp, struct sockaddr *sap) FAST_FUNC;
 #if ENABLE_FEATURE_HWIB
index 61d91788a32f66f8bf0573da76af90022eca605b..5c47abc1631e6c95bbea7207bbe455bcf25dac75 100644 (file)
@@ -338,6 +338,7 @@ int ifconfig_main(int argc UNUSED_PARAM, char **argv)
        char *p;
        /*char host[128];*/
        const char *host = NULL; /* make gcc happy */
+       IF_FEATURE_IFCONFIG_STATUS(char *show_all_param;)
 
        did_flags = 0;
 #if ENABLE_FEATURE_IFCONFIG_BROADCAST_PLUS
@@ -349,15 +350,16 @@ int ifconfig_main(int argc UNUSED_PARAM, char **argv)
        ++argv;
 
 #if ENABLE_FEATURE_IFCONFIG_STATUS
-       if (argv[0] && (argv[0][0] == '-' && argv[0][1] == 'a' && !argv[0][2])) {
-               interface_opt_a = 1;
+       show_all_param = NULL;
+       if (argv[0] && argv[0][0] == '-' && argv[0][1] == 'a' && !argv[0][2]) {
                ++argv;
+               show_all_param = IFNAME_SHOW_DOWNED_TOO;
        }
 #endif
 
        if (!argv[0] || !argv[1]) { /* one or no args */
 #if ENABLE_FEATURE_IFCONFIG_STATUS
-               return display_interfaces(argv[0] /* can be NULL */);
+               return display_interfaces(argv[0] ? argv[0] : show_all_param);
 #else
                bb_error_msg_and_die("no support for status display");
 #endif
index 0bbef98794f55e943c58ac57dcaf38959cc0a71f..ff99c29816777b3f642eea61db345cf4861149e0 100644 (file)
@@ -342,8 +342,6 @@ struct interface {
 };
 
 
-smallint interface_opt_a;      /* show all interfaces */
-
 static struct interface *int_list, *int_last;
 
 
@@ -1086,13 +1084,13 @@ static void ife_print(struct interface *ptr)
        bb_putchar('\n');
 }
 
-static int do_if_print(struct interface *ife) /*, int *opt_a)*/
+static int do_if_print(struct interface *ife, int show_downed_too)
 {
        int res;
 
        res = do_if_fetch(ife);
        if (res >= 0) {
-               if ((ife->flags & IFF_UP) || interface_opt_a)
+               if ((ife->flags & IFF_UP) || show_downed_too)
                        ife_print(ife);
        }
        return res;
@@ -1128,40 +1126,33 @@ static int for_all_interfaces(int (*doit) (struct interface *, void *),
 }
 #endif
 
-/* for ipv4 add/del modes */
-static int if_print(char *ifname)
+int FAST_FUNC display_interfaces(char *ifname)
 {
        struct interface *ife;
        int res;
 
-       if (!ifname) {
+       if (!ifname || ifname == IFNAME_SHOW_DOWNED_TOO) {
                /*res = for_all_interfaces(do_if_print, &interface_opt_a);*/
                if (!int_list) {
-                       int err = if_readlist();
-                       if (err < 0)
-                               return err;
+                       res = if_readlist();
+                       if (res < 0)
+                               goto ret;
                }
                for (ife = int_list; ife; ife = ife->next) {
-                       int err = do_if_print(ife); /*, &interface_opt_a);*/
-                       if (err)
-                               return err;
+                       BUILD_BUG_ON((int)(intptr_t)IFNAME_SHOW_DOWNED_TOO != 1);
+                       res = do_if_print(ife, (int)(intptr_t)ifname);
+                       if (res < 0)
+                               goto ret;
                }
                return 0;
        }
+
        ife = lookup_interface(ifname);
        res = do_if_fetch(ife);
        if (res >= 0)
                ife_print(ife);
-       return res;
-}
-
-int FAST_FUNC display_interfaces(char *ifname)
-{
-       int status;
-
-       status = if_print(ifname);
-
-       return (status < 0); /* status < 0 == 1 -- error */
+ ret:
+       return (res < 0); /* status < 0 == 1 -- error */
 }
 
 #if ENABLE_FEATURE_HWIB