From: Michael Tremer Date: Sat, 17 Jul 2010 08:45:58 +0000 (+0200) Subject: network: Replace listsort by a function that doesn't use /usr/bin/sort. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e90ebc450c32d8d65df857c8e215f497b9a1dc3;p=ipfire-3.x.git network: Replace listsort by a function that doesn't use /usr/bin/sort. --- diff --git a/pkgs/core/network/src/functions.util b/pkgs/core/network/src/functions.util index 023de2505..1163634b2 100644 --- a/pkgs/core/network/src/functions.util +++ b/pkgs/core/network/src/functions.util @@ -39,12 +39,30 @@ function warning_log() { log WARNING "$@" } -# XXX uses tr +# This function does not exist because we cannot use /usr/bin/sort. +# It implements some kind of bubble sort which is generally very slow +# but we only have to sort very small data. function listsort() { + local list=($@) + local list_prev + local i - for i in $@; do - echo "${i}" - done | sort | tr "\n" " " + local j + local var + while [ "${list[*]}" != "${list_prev}" ]; do + list_prev="${list[*]}" + for j in $(seq 1 ${#list[*]}); do + [ ${j} -ge ${#list[*]} ] && continue + i=$(( ${j} - 1 )) + if [[ "${list[${j}]}" < "${list[${i}]}" ]]; then + var="${list[${i}]}" + list[${i}]="${list[${j}]}" + list[${j}]="${var}" + fi + done + done + + echo "${list[*]}" } function listmatch() {