aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsh/net.sh16
1 files changed, 15 insertions, 1 deletions
diff --git a/sh/net.sh b/sh/net.sh
index 05081a7d..ab648a07 100755
--- a/sh/net.sh
+++ b/sh/net.sh
@@ -134,8 +134,22 @@ _wait_for_carrier() {
}
_netmask2cidr() {
- local i= len=0
+ # Some shells cannot handle hex arithmetic, so we massage it slightly
+ # Buggy shells include FreeBSD sh, dash and busybox.
+ # bash and NetBSD sh don't need this.
+ case $1 in
+ 0x*)
+ local hex=${1#0x*} quad=
+ while [ -n "${hex}" ]; do
+ local lastbut2=${hex#??*}
+ quad=${quad}${quad:+.}0x${hex%${lastbut2}*}
+ hex=${lastbut2}
+ done
+ set -- ${quad}
+ ;;
+ esac
+ local i= len=
local IFS=.
for i in $1; do
while [ ${i} != "0" ]; do