diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-03-05 17:46:17 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-03-05 17:46:17 +0100 |
commit | 82ec89480d524a219ad027d1f7c5aa42cc6373d5 (patch) | |
tree | ad36e295337e149aa170b0d241a0b441d828dd3e | |
parent | 8a5299fcfd54ae3b895b66249d6d105e956192cb (diff) |
networking/interface.c: get rid of global "smallint interface_opt_a"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | include/libbb.h | 2 | ||||
-rw-r--r-- | networking/ifconfig.c | 8 | ||||
-rw-r--r-- | networking/interface.c | 37 |
3 files changed, 20 insertions, 27 deletions
diff --git a/include/libbb.h b/include/libbb.h index f1ab1ca6f..fa878433e 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -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 diff --git a/networking/ifconfig.c b/networking/ifconfig.c index 61d91788a..5c47abc16 100644 --- a/networking/ifconfig.c +++ b/networking/ifconfig.c @@ -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 diff --git a/networking/interface.c b/networking/interface.c index 0bbef9879..ff99c2981 100644 --- a/networking/interface.c +++ b/networking/interface.c @@ -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 |