X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Fip.c;h=bba70890d4cbb7083669370480dad33fe7635f30;hb=5929edc1fac4340f99ed84e92bf3a2bedd4177c2;hp=f045f5f78de085d2478efe10ccb8eafbe7e09568;hpb=9a2d27249cc2235f7e001a9ea8d4605406bc5f38;p=oweals%2Fbusybox.git diff --git a/networking/ip.c b/networking/ip.c index f045f5f78..bba70890d 100644 --- a/networking/ip.c +++ b/networking/ip.c @@ -1,10 +1,7 @@ /* * ip.c "ip" utility frontend. * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. + * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. * * Authors: Alexey Kuznetsov, * @@ -23,35 +20,35 @@ #include #include -#include "./libiproute/utils.h" -#include "./libiproute/ip_common.h" +#include "libiproute/utils.h" +#include "libiproute/ip_common.h" #include "busybox.h" +#if 0 int preferred_family = AF_UNSPEC; int oneline = 0; char * _SL_ = NULL; -int ip_main(int argc, char **argv) +void ip_parse_common_args(int *argcp, char ***argvp) { - char *basename; + int argc = *argcp; + char **argv = *argvp; - basename = strrchr(argv[0], '/'); - if (basename == NULL) - basename = argv[0]; - else - basename++; - while (argc > 1) { char *opt = argv[1]; + if (strcmp(opt,"--") == 0) { argc--; argv++; break; } + if (opt[0] != '-') break; + if (opt[1] == '-') opt++; + if (matches(opt, "-family") == 0) { argc--; argv++; @@ -62,7 +59,7 @@ int ip_main(int argc, char **argv) else if (strcmp(argv[1], "link") == 0) preferred_family = AF_PACKET; else - invarg(argv[1], "invalid protocol family"); + invarg(bb_msg_invalid_arg, argv[1], "-family"); } else if (strcmp(opt, "-4") == 0) { preferred_family = AF_INET; } else if (strcmp(opt, "-6") == 0) { @@ -72,33 +69,44 @@ int ip_main(int argc, char **argv) } else if (matches(opt, "-oneline") == 0) { ++oneline; } else { - fprintf(stderr, "Option \"%s\" is unknown, try \"ip -help\".\n", opt); - exit(-1); + bb_show_usage(); } argc--; argv++; } - _SL_ = oneline ? "\\" : "\n" ; +} +#endif + +int ip_main(int argc, char **argv) +{ + int ret = EXIT_FAILURE; + + ip_parse_common_args(&argc, &argv); if (argc > 1) { #ifdef CONFIG_FEATURE_IP_ADDRESS - if (matches(argv[1], "address") == 0) - return do_ipaddr(argc-2, argv+2); + if (matches(argv[1], "address") == 0) { + ret = do_ipaddr(argc-2, argv+2); + } #endif #ifdef CONFIG_FEATURE_IP_ROUTE - if (matches(argv[1], "route") == 0) - return do_iproute(argc-2, argv+2); + if (matches(argv[1], "route") == 0) { + ret = do_iproute(argc-2, argv+2); + } #endif #ifdef CONFIG_FEATURE_IP_LINK - if (matches(argv[1], "link") == 0) - return do_iplink(argc-2, argv+2); + if (matches(argv[1], "link") == 0) { + ret = do_iplink(argc-2, argv+2); + } #endif #ifdef CONFIG_FEATURE_IP_TUNNEL - if (matches(argv[1], "tunnel") == 0 || - strcmp(argv[1], "tunl") == 0) - return do_iptunnel(argc-2, argv+2); + if (matches(argv[1], "tunnel") == 0 || strcmp(argv[1], "tunl") == 0) { + ret = do_iptunnel(argc-2, argv+2); + } #endif - fprintf(stderr, "Object \"%s\" is unknown, try \"ip help\".\n", argv[1]); - exit(-1); } + if (ret) { + bb_show_usage(); + } + return(EXIT_SUCCESS); }