mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-04 20:40:57 +02:00
38867: update strace completion
Also factor out completion for system calls and new functions for truss and ltrace.
This commit is contained in:
parent
ccb45b3201
commit
52f46cca75
5 changed files with 232 additions and 114 deletions
|
@ -1,5 +1,10 @@
|
||||||
2016-07-17 Oliver Kiddle <opk@zsh.org>
|
2016-07-17 Oliver Kiddle <opk@zsh.org>
|
||||||
|
|
||||||
|
* 38867: Completion/Linux/Command/_ltrace,
|
||||||
|
Completion/Linux/Command/_strace, Completion/Unix/Command/_truss,
|
||||||
|
Completion/Unix/Type/_sys_calls: update strace completion
|
||||||
|
factoring out system calls and new truss and ltrace completions
|
||||||
|
|
||||||
* Marko Myllynen: 38837 (tweaked c.f. 38826):
|
* Marko Myllynen: 38837 (tweaked c.f. 38826):
|
||||||
Completion/Unix/Command/_libvirt: new virsh completion
|
Completion/Unix/Command/_libvirt: new virsh completion
|
||||||
|
|
||||||
|
|
35
Completion/Linux/Command/_ltrace
Normal file
35
Completion/Linux/Command/_ltrace
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#compdef ltrace
|
||||||
|
|
||||||
|
local root hlp="-h --help -V --version"
|
||||||
|
|
||||||
|
(( EUID )) && root='!'
|
||||||
|
|
||||||
|
_arguments -s -S $args \
|
||||||
|
"(-c -a --align $hlp)"{-a+,--align=}"[align return values in a secific column]:column [$((COLUMNS*5/8))]" \
|
||||||
|
"(-c $hlp)-A+[specify maximum number of array elements to print]:elements" \
|
||||||
|
"(-c -b --no-signals $hlp)"{-b,--no-signals}"[don't print signals]" \
|
||||||
|
"(-a --align -A -b --no-signals -i -n --indent -r -s -t -tt -ttt -T $hlp)-c[count time and calls, and report a summary on exit]" \
|
||||||
|
"(-C --demangle $hlp)"{-C,--demangle}'[decode low-level symbol names into user-level names]' \
|
||||||
|
"(-D --debug $hlp)"{-D+,--debug=}'[enable debugging]:mask:(help 77)' \
|
||||||
|
"($hlp)*-e+[modify which library calls to trace]:filter" \
|
||||||
|
"($hlp)-f[trace child processes]" \
|
||||||
|
"($hlp)*"{-F+,--config=}'[load alternate configuration file]:file:_files' \
|
||||||
|
'(- 1 *)'{-h,--help}'[display help information]' \
|
||||||
|
"(-c $hlp)-i[print instruction pointer at time of call]" \
|
||||||
|
"(-l --library $hlp)"{-l+,--library=}'[only trace symbols implemented by specified library]:library:_files' \
|
||||||
|
"($hlp)-L[don't display library calls]" \
|
||||||
|
"(-c -n --indent $hlp)"{-n+,--indent=}'[specify indent for each level of call nesting]:spaces' \
|
||||||
|
"(-o --output $hlp)"{-o+,--output=}'[write the trace output to specified file]:file:_files' \
|
||||||
|
"(: $hlp)-p+[attach to the process with specified process ID and begin tracing]:process ID:_pids" \
|
||||||
|
"(-c $hlp)-r[print relative timestamps]" \
|
||||||
|
"(-c $hlp)-s+[specify the maximum string size to print]:maximum string size [32]" \
|
||||||
|
"($hlp)-S[trace system calls as well as library calls]" \
|
||||||
|
"(-c -ttt $hlp)-t[prefix each line of the trace with the time of day]" \
|
||||||
|
"(-c -ttt -tt $hlp)-tt[prefix each line of the trace with the time of day including the microseconds]" \
|
||||||
|
"(-c -tt -t $hlp)-ttt[prefix each line of the trace with the number of seconds and microseconds since the epoch]" \
|
||||||
|
"(-c $hlp)-T[show the time spent in each call]" \
|
||||||
|
"${root}-u+[run as specified user]:user:_users" \
|
||||||
|
'(- 1 *)'{-V,--version}'[display version information]' \
|
||||||
|
"($hlp)*-x+[modify which static functions to trace]:filter" \
|
||||||
|
'(-):command name: _command_names -e' \
|
||||||
|
'*::arguments:_normal'
|
|
@ -1,119 +1,101 @@
|
||||||
#compdef strace
|
#compdef strace strace64
|
||||||
|
|
||||||
# TODO:
|
local curcontext="$curcontext" state line root expl ret=1
|
||||||
# - make _sys_calls system-dependent
|
typeset -A opt_args
|
||||||
# - allow negated calls (e.g. -e!write)
|
|
||||||
_sys_calls () {
|
|
||||||
local expl
|
|
||||||
local -a sys_calls
|
|
||||||
|
|
||||||
sys_calls=(_llseek _newselect _sysctl accept access acct
|
(( EUID )) && root='!'
|
||||||
adjtimex afs_syscall alarm bdflush bind break brk cacheflush
|
|
||||||
capget capset chdir chmod chown chown32 chroot clone close connect
|
|
||||||
creat create_module delete_module dup dup2 execve exit fchdir
|
|
||||||
fchmod fchown fchown32 fcntl fcntl64 fdatasync flock fork fstat
|
|
||||||
fstat64 fstatfs fsync ftime ftruncate ftruncate64 get_kernel_syms
|
|
||||||
getcwd getdents getdents64 getegid getegid32 geteuid geteuid32
|
|
||||||
getgid getgid32 getgroups getgroups32 getitimer getpagesize getpeername
|
|
||||||
getpmsg getpgid getpgrp getpid getppid getpriority getresgid getresgid32
|
|
||||||
getresuid getresuid32 getrlimit getrusage getsid getsockname getsockopt
|
|
||||||
gettid gettimeofday getuid getuid32 gtty idle init_module ioctl ioperm
|
|
||||||
iopl ipc kill lchown lchown32 link listen lock lseek lstat lstat64
|
|
||||||
madvise mincore mkdir mknod mlock mlockall mmap modify_ldt mount mprotect
|
|
||||||
mpx mremap msync munlock munlockall munmap nanosleep nfsservctl nice
|
|
||||||
oldfstat oldlstat oldolduname oldstat oldumount olduname open pause
|
|
||||||
personality phys pipe pivot_root poll prctl pread prof profil ptrace
|
|
||||||
putpmsg pwrite query_module quotactl read readahead readdir readlink
|
|
||||||
readv reboot recv recvfrom recvmsg rename rmdir rt_sigaction
|
|
||||||
rt_sigpending rt_sigprocmask rt_sigqueueinfo rt_sigreturn rt_sigsuspend
|
|
||||||
rt_sigtimedwait sched_get_priority_max sched_get_priority_min
|
|
||||||
sched_getparam sched_getscheduler sched_rr_get_interval sched_setparam
|
|
||||||
sched_setscheduler sched_yield security select sendfile send sendmsg sendto
|
|
||||||
setdomainname setfsgid setfsgid32 setfsuid setfsuid32 setgid setgid32
|
|
||||||
setgroups setgroups32 sethostname setitimer setpgid setpriority setregid
|
|
||||||
setregid32 setresgid setresgid32 setresuid setresuid32 setreuid setreuid32
|
|
||||||
setrlimit setsid setsockopt settimeofday setuid setuid32 setup sgetmask
|
|
||||||
shutdown sigaction sigaltstack signal sigpending sigprocmask sigreturn
|
|
||||||
sigsuspend socket socketcall socketpair ssetmask stat stat64 statfs stime
|
|
||||||
stty swapoff swapon symlink sync sysfs sysinfo syslog time times truncate
|
|
||||||
truncate64 ulimit umask umount uname unlink uselib ustat utime vfork vhangup
|
|
||||||
vm86 vm86old wait4 waitpid write writev)
|
|
||||||
|
|
||||||
for t in ${(s:,:)${PREFIX}}; do
|
_arguments -C -s \
|
||||||
sys_calls=( ${sys_calls:#$t} )
|
'-a+[align return values in a specific column]:column number [40]' \
|
||||||
done
|
'(-c)-i[print instruction pointer at time of syscall]' \
|
||||||
|
'-o+[write the trace output to the file]:output file:->file-pipe' \
|
||||||
|
'-q[suppress messages about attaching, detaching etc.]' \
|
||||||
|
'(-q)-qq[suppress messages about process exit status]' \
|
||||||
|
'(-c)-r[print a relative timestamp upon entry to each system call]' \
|
||||||
|
'-s+[specify the maximum string size to print]:maximum string size [32]' \
|
||||||
|
'(-c -ttt)-t[prefix each line of the trace with the time of day]' \
|
||||||
|
'(-c -ttt -tt)-tt[prefix each line of the trace with the time of day including the microseconds]' \
|
||||||
|
'(-c -tt -t)-ttt[prefix each line of the trace with the number of seconds and microseconds since the epoch]' \
|
||||||
|
'(-c)-T[show the time spent in system calls]' \
|
||||||
|
'(-xx)-x[print all non-ASCII strings in hexadecimal string format]' \
|
||||||
|
'(-x)-xx[print all strings in hexadecimal string format]' \
|
||||||
|
'(-c -yy)-y[print paths associated with file descriptor arguments]' \
|
||||||
|
'(-c -y)-yy[print protocol specific information associated with socket file descriptors]' \
|
||||||
|
'(-C -i -k -r -ff -t -tt -ttt -T -y -yy)-c[count time, calls, and errors for each system call and report a summary]' \
|
||||||
|
'(-c)-C[count time, calls, and errors for each system call and report a summary in addition to regular output]' \
|
||||||
|
'-O+[overhead for tracing system calls]:overhead (microseconds)' \
|
||||||
|
'-S+[sort the output of the histogram (-c option) by the specified criterion]:sort criterion:(time calls name nothing)' \
|
||||||
|
'-w[summarise syscall latency]' \
|
||||||
|
'*-e+[select events to trace or how to trace]:system call:->expressions' \
|
||||||
|
'*-P+[trace only system calls accessing given path]:path:_files' \
|
||||||
|
'-b+[detach from process on specified syscall]:syscall:(execve)' \
|
||||||
|
'-f[trace child processes as they are created by currently traced processes]' \
|
||||||
|
'(-c -C)-ff[write each process trace to <filename>.<pid> (when using -o <filename>]' \
|
||||||
|
'-D[run tracer as detached grandchild, keeping traced process as direct child of calling process]' \
|
||||||
|
'-I+[when strace can be interrupted by signals]:interruptible:((1\:"no signals are blocked" 2\:"fatal signals are blocked while decoding syscall (default)" 3\:"fatal signals are always blocked (default with -o)" 4\:"fatal signals and SIGTSTP are always blocked"))' \
|
||||||
|
'*-E+[set or remove exported environment variable]:variable:->envars' \
|
||||||
|
"${root}-u+[run as specified user]:user:_users" \
|
||||||
|
'(:)*-p+[attach to the process with specified process ID and begin tracing]:process ID:_pids' \
|
||||||
|
'-d[show debug output of strace itself on standard error]' \
|
||||||
|
'-v[print unabbreviated versions of environment, stat, termios, etc. calls]' \
|
||||||
|
'(- 1 *)-h[display help information]' \
|
||||||
|
'(- 1 *)-V[display version information]' \
|
||||||
|
'(-c)-k[obtain stack trace between each syscall]' \
|
||||||
|
'(-):command name: _command_names -e' \
|
||||||
|
'*::arguments:_normal' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
expressions)
|
||||||
|
_values -C -S = 'qualifying expression' \
|
||||||
|
'trace[trace specified set of system calls only]:system calls:->syscalls' \
|
||||||
|
'abbrev[abbreviate the output from printing each member of large structures]:system call:_sequence _sys_calls -a -n' \
|
||||||
|
'verbose[dereference structures for the specified set of system calls]:system call:_sequence _sys_calls -a -n' \
|
||||||
|
'raw[print raw, undecoded arguments for the specified set of system calls]:system call:_sequence _sys_calls -a -n' \
|
||||||
|
'signal[trace only the specified subset of signals]:signal:_sequence _signals -s -M "B\:!="' \
|
||||||
|
'read[perform a full hex and ASCII dump of all the data read from listed file descriptors]:file descriptor:_sequence _file_descriptors' \
|
||||||
|
'write[perform a full hex and ASCII dump of all the data written to listed file descriptors]:file descriptor:_sequence _file_descriptors' && ret=0
|
||||||
|
if [[ $words[CURRENT] != *=* || $state = syscalls ]]; then
|
||||||
|
local dedup sets suf="-qS,"
|
||||||
|
compset -P '!'
|
||||||
|
dedup=( ${(Ms.,.)PREFIX##*,} ${(Ms.,.)SUFFIX%%,*} )
|
||||||
|
compset -S ',*' || suf=""
|
||||||
compset -P '*,'
|
compset -P '*,'
|
||||||
_wanted sys_calls expl 'System calls' compadd -qS , -a sys_calls
|
sets=(
|
||||||
}
|
'file:trace all system calls which take a file name as an argument'
|
||||||
|
|
||||||
_sets () {
|
|
||||||
_alternative \
|
|
||||||
'special:special values:(all none)' \
|
|
||||||
'calls::_sys_calls'
|
|
||||||
}
|
|
||||||
|
|
||||||
_traces () {
|
|
||||||
local expl
|
|
||||||
traces=('file:trace all system calls which take a file name as an argument'
|
|
||||||
'process:trace all system calls which involve process management'
|
'process:trace all system calls which involve process management'
|
||||||
'network:trace all the network related system calls'
|
'network:trace all the network related system calls'
|
||||||
'signal:trace all signal related system calls'
|
'signal:trace all signal related system calls'
|
||||||
'ipc:trace all IPC related system calls'
|
'ipc:trace all IPC related system calls'
|
||||||
'desc:trace all file descriptor related system calls')
|
'desc:trace all file descriptor related system calls'
|
||||||
compset -P '*,'
|
'memory:trace all memory mapping related system calls'
|
||||||
_describe -t traces 'Related system calls' traces -qS ,
|
)
|
||||||
}
|
|
||||||
|
|
||||||
_traces_sets () {
|
|
||||||
_alternative \
|
_alternative \
|
||||||
'traces::_traces' \
|
"related system call:sets: _describe -t traces 'related system call' sets -F dedup $suf" \
|
||||||
'sets::_sets'
|
"system call:syscalls:_sys_calls -a -n $suf -F dedup" && ret=0
|
||||||
}
|
|
||||||
|
|
||||||
_expression () {
|
|
||||||
_values -S = "Qualifying expression" \
|
|
||||||
'trace[trace specified set of system calls only]:system calls:_traces_sets' \
|
|
||||||
'abbrev[abbreviate the output from printing each member of large structures]:system calls:_sets' \
|
|
||||||
'verbose[dereference structures for the specified set of system calls]:system calls:_sets' \
|
|
||||||
'raw[print raw, undecoded arguments for the specified set of system calls]:system calls:_sets' \
|
|
||||||
'signal[trace only the specified subset of signals]:signal:{compset -P "*,"; _signals -s -qS ,}' \
|
|
||||||
'read[perform a full hex and ASCII dump of all the data read from listed file descriptors]:file descriptors:{compset -P "*,"; _file_descriptors -qS ,}' \
|
|
||||||
'write[perform a full hex and ASCII dump of all the data written to listed file descriptors]:file descriptors:{compset -P "*,"; _file_descriptors -qS ,}'
|
|
||||||
if [[ -z "$words[CURRENT]" || -n "${words[CURRENT]:#*=*}" ]]; then
|
|
||||||
_traces_sets
|
|
||||||
fi
|
fi
|
||||||
}
|
;;
|
||||||
|
file-pipe)
|
||||||
|
compset -P '\\'
|
||||||
|
if (( ! $+opt_args[-ff] )) && compset -P '(!|\|)'; then
|
||||||
|
compset -q
|
||||||
|
if (( CURRENT == 1 )); then
|
||||||
|
_command_names -e && ret=0
|
||||||
|
else
|
||||||
|
_normal && ret=0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
_files && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
envars)
|
||||||
|
if [[ -prefix *=* ]]; then
|
||||||
|
compstate[parameter]="${PREFIX%%\=*}"
|
||||||
|
compset -P 1 '*='
|
||||||
|
_value && ret=0
|
||||||
|
else
|
||||||
|
_parameters -qS= -g "*export*" && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
_arguments \
|
return ret
|
||||||
'()-c[count time, calls, and errors for each system call and report a summary]' \
|
|
||||||
'()-C[count time, calls, and errors for each system call and report a summary in addition to regular output]' \
|
|
||||||
'-d[show some debugging output of strace itself on the standard error]' \
|
|
||||||
'-D[run tracer as detached grandchild, keeping traced process as direct child of calling process]' \
|
|
||||||
'-f[trace child processes as they are created by currently traced processes]' \
|
|
||||||
'-ff[write each process trace to <filename>.<pid> (when using -o <filename>]' \
|
|
||||||
'(-c -d -f -ff -i -q -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p -s -S -u -E)-h[print help]' \
|
|
||||||
'-i[print the instruction pointer at the time of the system call]' \
|
|
||||||
'-q[suppress messages about attaching, detaching etc.]' \
|
|
||||||
'-r[print a relative timestamp upon entry to each system call]' \
|
|
||||||
'(-ttt)-t[prefix each line of the trace with the time of day]' \
|
|
||||||
'(-ttt -tt)-tt[prefix each line of the trace with the time of day including the microseconds]' \
|
|
||||||
'(-tt -t)-ttt[prefix each line of the trace with the number of seconds and microseconds since the epoch]' \
|
|
||||||
'-T[show the time spent in system calls]' \
|
|
||||||
'-y[print paths associated with file descriptor arguments]' \
|
|
||||||
'-v[print unabbreviated versions of environment, stat, termios, etc. calls]' \
|
|
||||||
'(-c -d -f -ff -h -i -q -r -t -tt -ttt -T -v -x -xx -a -e -o -O -p -s -S -u -E)-V[print the version number of strace]' \
|
|
||||||
'(-xx)-x[print all non-ASCII strings in hexadecimal string format]' \
|
|
||||||
'(-x)-xx[print all strings in hexadecimal string format]' \
|
|
||||||
'-I+[when strace can be interrupted by signals]:interruptible:((1\:"no signals are blocked" 2\:"fatal signals are blocked while decoding syscall (default)" 3\:"fatal signals are always blocked (default if '\''-o FILE PROG'\''" 4\:"fatal signals and SIGTSTP are always blocked"))' \
|
|
||||||
'*-P+[trace only system calls accessing given path]:path:_files' \
|
|
||||||
'-a+[align return values in a specific column (default 40)]:column number' \
|
|
||||||
'*-e+[select events to trace or how to trace]:system call:_expression' \
|
|
||||||
'-o+[write the trace output to the file]:output file:_files' \
|
|
||||||
'-O+[overhead for tracing system calls]:overhead microseconds' \
|
|
||||||
'(:)-p+[attach to the process with specified process ID and begin tracing]:process ID:_pids' \
|
|
||||||
'-s+[specify the maximum string size to print (default 32)]:maximum string size' \
|
|
||||||
'-S+[sort the output of the histogram (-c option) by the specified criterion]:sort by:(time calls name nothing)' \
|
|
||||||
'-u+[run as specified user]:user:_users' \
|
|
||||||
'*-E+[remove variable from the inherited list of environment or define a value]:variable:_printenv' \
|
|
||||||
'(-):command name: _command_names -e' \
|
|
||||||
'*::arguments:_normal'
|
|
||||||
|
|
76
Completion/Unix/Command/_truss
Normal file
76
Completion/Unix/Command/_truss
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
#compdef truss
|
||||||
|
|
||||||
|
local curcontext="$curcontext" state line expl ret=1
|
||||||
|
typeset -A opt_args
|
||||||
|
local args faults
|
||||||
|
|
||||||
|
args=(
|
||||||
|
'(-c)-a[show argument strings with exec system call]'
|
||||||
|
'(-a -d -D -e -E -l -r -v -w -x)-c[count traced system calls, signals etc]'
|
||||||
|
'(-c)-d[include timestamps in output]'
|
||||||
|
'(-c)-D[include delta timestamps in output]'
|
||||||
|
'(-c)-e[show environment strings with exec system call]'
|
||||||
|
'-f[follow child processes created after a fork]'
|
||||||
|
'-o+[specify trace output file]:output file:_files'
|
||||||
|
)
|
||||||
|
|
||||||
|
case $OSTYPE in
|
||||||
|
aix*|solaris*)
|
||||||
|
args+=(
|
||||||
|
'(-c)-E[include delta timestamps of time spent within the system call]'
|
||||||
|
"-i[don't display interruptible sleeping system calls]"
|
||||||
|
'(-c)-l[include LWP id in each line of output]'
|
||||||
|
'-m+[specify machine faults to trace]: :->faults'
|
||||||
|
'(-c)-r+[show full contents of the I/O buffer for each read()]:file descriptor'
|
||||||
|
'-s+[specify signals to trace]:signal:_sequence _signals -M "B\:!="'
|
||||||
|
'-S+[specify signals at which process should be stopped and abandoned]:signal:_sequence _signals -M "B\:!="'
|
||||||
|
'-t+[specify system calls to trace or exclude]:system call:_sequence _sys_calls -a -M "B\:!="'
|
||||||
|
'-T+[specify system calls at which process should be stopped and abandoned]:system call:_sequence _sys_calls -a -M "B\:!="'
|
||||||
|
'*-u+[user-level function call tracing]: :->userfuncs'
|
||||||
|
'-U+[specify user-level functions at which process should be stopped and abandoned]: :->userfuncs'
|
||||||
|
'(-c)-v+[enable verbose output of structures for specified system calls]:system call:_sequence _sys_calls -a -M "B\:!="'
|
||||||
|
'(-c)-w+[show full contents of the I/O buffer for each write()]:file descriptor'
|
||||||
|
'(-c)-x+[enable raw output of structures for specified system calls]:system call:_sequence _sys_calls -a'
|
||||||
|
'-p[trace specified existing processes]'
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
dragonfly*|freebsd*)
|
||||||
|
args+=(
|
||||||
|
'-s+[specify the maximum string size to print]:maximum string size [32]'
|
||||||
|
"(-c)-S[don't report signals received by the process]"
|
||||||
|
'(*)-p[trace specified existing processes]:pid:_pids'
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
_arguments -C -s : $args \
|
||||||
|
'*::arguments:->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
faults)
|
||||||
|
faults=( all ${${${(M)${(f)"$(</usr/include/sys/fault.h)"}:#?define[[:blank:]]##FLT*}#*[[:blank:]]FLT}%%[[:blank:]]*} ) 2>/dev/null
|
||||||
|
_sequence _wanted faults expl fault compadd - -M 'B:!=' -M 'B:[Ff][Ll][Tt]=' -M 'm:{a-z}={A-Z}' -a faults && ret=0
|
||||||
|
;;
|
||||||
|
args)
|
||||||
|
if [[ $OSTYPE = solaris* ]] && (( $+opt_args[-p] )); then
|
||||||
|
_pids && ret=0
|
||||||
|
elif (( CURRENT == 1 )); then
|
||||||
|
_command_names -e && ret=0
|
||||||
|
else
|
||||||
|
_normal && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
userfuncs)
|
||||||
|
if [[ -prefix *: ]]; then
|
||||||
|
_message -e functions function
|
||||||
|
else
|
||||||
|
compset -P '*,'
|
||||||
|
compset -S '[,:]*'
|
||||||
|
_description -x libs expl lib
|
||||||
|
compadd "$expl[@]" -S '' lib && ret=0
|
||||||
|
compadd "$expl[@]" -qS, a.out && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
20
Completion/Unix/Type/_sys_calls
Normal file
20
Completion/Unix/Type/_sys_calls
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#autoload
|
||||||
|
|
||||||
|
# Options:
|
||||||
|
#
|
||||||
|
# -a add "all" as an additional match
|
||||||
|
# -n add "none" as an additional match
|
||||||
|
|
||||||
|
local expl all none
|
||||||
|
local ifile=/usr/include/sys/syscall.h
|
||||||
|
local -au syscalls
|
||||||
|
|
||||||
|
zparseopts -D -K -E a=all n=none
|
||||||
|
|
||||||
|
[[ $OSTYPE = linux* ]] && ifile=/usr/include/bits/syscall.h
|
||||||
|
syscalls=( ${${${(M)${(f)"$(<$ifile)"}:#?define[[:blank:]]##SYS_*}#*[[:blank:]]SYS_}%%[[:blank:]]*} ) 2>/dev/null
|
||||||
|
[[ -n $all ]] && syscalls+=( all )
|
||||||
|
[[ -n $none ]] && syscalls+=( none )
|
||||||
|
|
||||||
|
_description syscalls expl 'system call'
|
||||||
|
compadd "$@" "$expl[@]" -a syscalls
|
Loading…
Reference in a new issue