#compdef coreadm

local -a content option

content=(
  "anon[anonymous private mappings]"
  "ctf[CTF type information]"
  "data[writable private file mappings]"
  "dism[DISM mappings]"
  "heap[process heap]"
  "ism[ISM mappings]"
  "rodata[read-only private file mappings]"
  "shanon[anonymous shared mappings]"
  "shfile[file-backed shared mappings]"
  "shm[System V shared memory]"
  "stack[process stack]"
  "symtab[symbol table sections for loaded files]"
  "text[readable and executable private file mappings]"
)

option=(
  'global:allow global core dumps'
  'process:allow per-process core dumps'
  'global-setid:allow set-id global core dumps'
  'proc-setid:allow set-id per-process core dumps'
  'log:generate a syslog message on global core dump'
  'kzone:allow kernel zone core dumps'
)

# _values doesn't quite work for us here -- the separator can be either
# "+" or "-"
_arguments -s \
  - set1 \
  '-g[global core file name pattern]:' \
  '-G[global core file content]:content:_values -s + "content" $content' \
  '-i[per-process core file name pattern]:' \
  '-I[per-process core file content]:content:_values -s + "content" $content' \
  '*-d[disable core option]:option:(($option))' \
  '*-e[enable core option]:option:(($option))' \
  - set2 \
  '-p[PID-specific per-process core file name pattern]:' \
  '-P[PID-specific per-process core file content]:content:_values -s + "content" $content' \
  '*:pids:_pids' \
  - set3 \
  '-u[update options from coreadm.conf]'
