diff options
author | Bartosz Golaszewski <bartekgola@gmail.com> | 2013-07-25 04:39:04 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-07-25 04:39:04 +0200 |
commit | c19be75d57ff42dee54b53e21b3eb4723b8cf243 (patch) | |
tree | 7fc65e75d2c91ee1021e327aaa4e1ba0e81ccb15 /networking | |
parent | b855460adcda8dfb18ac36755f128ce32088ae87 (diff) | |
download | busybox-w32-c19be75d57ff42dee54b53e21b3eb4723b8cf243.tar.gz busybox-w32-c19be75d57ff42dee54b53e21b3eb4723b8cf243.tar.bz2 busybox-w32-c19be75d57ff42dee54b53e21b3eb4723b8cf243.zip |
networking: code shrink
function old new delta
in_ether - 124 +124
hexchar2int 42 - -42
ifconfig_main 1237 1106 -131
ether_input 141 - -141
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 0/1 up/down: 124/-314) Total: -190 bytes
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking')
-rw-r--r-- | networking/ifconfig.c | 43 | ||||
-rw-r--r-- | networking/interface.c | 55 |
2 files changed, 1 insertions, 97 deletions
diff --git a/networking/ifconfig.c b/networking/ifconfig.c index 782374b35..999305aff 100644 --- a/networking/ifconfig.c +++ b/networking/ifconfig.c | |||
@@ -265,49 +265,6 @@ static const struct options OptArray[] = { | |||
265 | { NULL, 0, ARG_HOSTNAME, (IFF_UP | IFF_RUNNING) } | 265 | { NULL, 0, ARG_HOSTNAME, (IFF_UP | IFF_RUNNING) } |
266 | }; | 266 | }; |
267 | 267 | ||
268 | #if ENABLE_FEATURE_IFCONFIG_HW | ||
269 | /* Input an Ethernet address and convert to binary. */ | ||
270 | static int in_ether(const char *bufp, struct sockaddr *sap) | ||
271 | { | ||
272 | char *ptr; | ||
273 | int i, j; | ||
274 | unsigned char val; | ||
275 | unsigned char c; | ||
276 | |||
277 | sap->sa_family = ARPHRD_ETHER; | ||
278 | ptr = (char *) sap->sa_data; | ||
279 | |||
280 | i = 0; | ||
281 | do { | ||
282 | j = val = 0; | ||
283 | |||
284 | /* We might get a semicolon here - not required. */ | ||
285 | if (i && (*bufp == ':')) { | ||
286 | bufp++; | ||
287 | } | ||
288 | |||
289 | do { | ||
290 | c = *bufp; | ||
291 | if (((unsigned char)(c - '0')) <= 9) { | ||
292 | c -= '0'; | ||
293 | } else if ((unsigned char)((c|0x20) - 'a') <= 5) { | ||
294 | c = (unsigned char)((c|0x20) - 'a') + 10; | ||
295 | } else if (j && (c == ':' || c == 0)) { | ||
296 | break; | ||
297 | } else { | ||
298 | return -1; | ||
299 | } | ||
300 | ++bufp; | ||
301 | val <<= 4; | ||
302 | val += c; | ||
303 | } while (++j < 2); | ||
304 | *ptr++ = val; | ||
305 | } while (++i < ETH_ALEN); | ||
306 | |||
307 | return *bufp; /* Error if we don't end at end of string. */ | ||
308 | } | ||
309 | #endif | ||
310 | |||
311 | int ifconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 268 | int ifconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
312 | int ifconfig_main(int argc UNUSED_PARAM, char **argv) | 269 | int ifconfig_main(int argc UNUSED_PARAM, char **argv) |
313 | { | 270 | { |
diff --git a/networking/interface.c b/networking/interface.c index 9ae8b3f03..3dc5b3640 100644 --- a/networking/interface.c +++ b/networking/interface.c | |||
@@ -722,68 +722,15 @@ static char* FAST_FUNC ether_print(unsigned char *ptr) | |||
722 | return buff; | 722 | return buff; |
723 | } | 723 | } |
724 | 724 | ||
725 | static int FAST_FUNC ether_input(const char *bufp, struct sockaddr *sap); | ||
726 | |||
727 | static const struct hwtype ether_hwtype = { | 725 | static const struct hwtype ether_hwtype = { |
728 | .name = "ether", | 726 | .name = "ether", |
729 | .title = "Ethernet", | 727 | .title = "Ethernet", |
730 | .type = ARPHRD_ETHER, | 728 | .type = ARPHRD_ETHER, |
731 | .alen = ETH_ALEN, | 729 | .alen = ETH_ALEN, |
732 | .print = ether_print, | 730 | .print = ether_print, |
733 | .input = ether_input | 731 | .input = in_ether |
734 | }; | 732 | }; |
735 | 733 | ||
736 | static unsigned hexchar2int(char c) | ||
737 | { | ||
738 | if (isdigit(c)) | ||
739 | return c - '0'; | ||
740 | c &= ~0x20; /* a -> A */ | ||
741 | if ((unsigned)(c - 'A') <= 5) | ||
742 | return c - ('A' - 10); | ||
743 | return ~0U; | ||
744 | } | ||
745 | |||
746 | /* Input an Ethernet address and convert to binary. */ | ||
747 | static int FAST_FUNC ether_input(const char *bufp, struct sockaddr *sap) | ||
748 | { | ||
749 | unsigned char *ptr; | ||
750 | char c; | ||
751 | int i; | ||
752 | unsigned val; | ||
753 | |||
754 | sap->sa_family = ether_hwtype.type; | ||
755 | ptr = (unsigned char*) sap->sa_data; | ||
756 | |||
757 | i = 0; | ||
758 | while ((*bufp != '\0') && (i < ETH_ALEN)) { | ||
759 | val = hexchar2int(*bufp++) * 0x10; | ||
760 | if (val > 0xff) { | ||
761 | errno = EINVAL; | ||
762 | return -1; | ||
763 | } | ||
764 | c = *bufp; | ||
765 | if (c == ':' || c == 0) | ||
766 | val >>= 4; | ||
767 | else { | ||
768 | val |= hexchar2int(c); | ||
769 | if (val > 0xff) { | ||
770 | errno = EINVAL; | ||
771 | return -1; | ||
772 | } | ||
773 | } | ||
774 | if (c != 0) | ||
775 | bufp++; | ||
776 | *ptr++ = (unsigned char) val; | ||
777 | i++; | ||
778 | |||
779 | /* We might get a semicolon here - not required. */ | ||
780 | if (*bufp == ':') { | ||
781 | bufp++; | ||
782 | } | ||
783 | } | ||
784 | return 0; | ||
785 | } | ||
786 | |||
787 | static const struct hwtype ppp_hwtype = { | 734 | static const struct hwtype ppp_hwtype = { |
788 | .name = "ppp", | 735 | .name = "ppp", |
789 | .title = "Point-to-Point Protocol", | 736 | .title = "Point-to-Point Protocol", |