]> git.ipfire.org Git - people/ms/network.git/commitdiff
network: Replace listsort by a function that doesn't use /usr/bin/sort.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 17 Jul 2010 08:45:58 +0000 (10:45 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 17 Jul 2010 08:45:58 +0000 (10:45 +0200)
functions.util

index 023de25058d64b9e23e15e4172dbb4e2925d5b44..1163634b2678b7bb730da2acef5805f133113f3d 100644 (file)
@@ -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() {