[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 1.3-333-g8a5036a

Ville Skyttä ville.skytta at iki.fi
Wed May 25 21:56:38 UTC 2011


The following commit has been merged in the master branch:
commit 8a5036a9e8f7afd4ef5ecc1e855934793acc4f9b
Author: Ville Skyttä <ville.skytta at iki.fi>
Date:   Thu May 26 00:55:30 2011 +0300

    strace: Rewrite arch specific syscall extraction in plain bash.

diff --git a/completions/strace b/completions/strace
index 4d1f17c..5d2b98d 100644
--- a/completions/strace
+++ b/completions/strace
@@ -37,23 +37,30 @@ _strace()
                         trace)
                             # Import arch-specific syscalls
                             #+ -- not foolproof IMHO --David Paleino
-                            local arch=$(command uname -m)
-                            local syscalls=$(awk '/^#define __NR/ {print $2}' \
-                                /usr/include/asm/unistd.h | sed -e \
-                                's/__NR_//')
-                            if [ -z "$syscalls" ]; then
-                                local unistd
+                            local define syscall rest
+                            local -A syscalls
+                            while read -r define syscall rest; do
+                                [[ $define == "#define" && \
+                                    $syscall =~ ^__NR_(.+) ]] && \
+                                    syscalls[${BASH_REMATCH[1]}]=1
+                            done 2>/dev/null < /usr/include/asm/unistd.h
+                            if [[ ! $syscalls ]]; then
+                                local unistd arch=$( command uname -m )
                                 if [[ "$arch" == *86 ]]; then
                                     unistd=/usr/include/asm/unistd_32.h
                                 else
                                     unistd=/usr/include/asm/unistd_64.h
                                 fi
-                                syscalls=$(awk '/^#define __NR/ {print $2}' \
-                                    $unistd | sed -e 's/__NR_//')
+                                while read -r define syscall rest; do
+                                    [[ $define == "#define" && \
+                                        $syscall =~ ^__NR_(.+) ]] && \
+                                        syscalls[${BASH_REMATCH[1]}]=1
+                                done 2>/dev/null < $unistd
                             fi
 
-                            COMPREPLY=( $( compgen -W "$syscalls file process
-                                network signal ipc desc all none" -- "$cur") )
+                            COMPREPLY=( $( compgen -W '${!syscalls[@]} file
+                                process network signal ipc desc all none' \
+                                    -- "$cur") )
                             return 0
                             ;;
                     esac

-- 
bash-completion



More information about the Bash-completion-commits mailing list