[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