#autoload local ret stateset fvals cvalsvar cvalind typeset -a fvals opts if [[ $1 = -O* ]]; then opts+=$1 shift fi opts+=(-s , -S =) cvalind=$argv[(I)-A*] while (( cvalind )); do if [[ ${(P)cvalind} = -A?* ]]; then cvalsvar=${(P)cvalind[3,-1]} argv[cvalind]=() else cvalsvar=$argv[cvalind+1] argv[cvalind,cvalind+1]=() fi cvalind=$argv[(I)-A*] done fvals=( 'ro[mount filesystem read-only]' 'allow_other[allow access to other users]' 'allow_root[allow access to root]' 'nonempty[allow mounts over non-empty file/dir]' 'default_permissions[enable permission checking by kernel]' 'fsname[set filesystem name]:name' 'large_read[issue large read requests (linux v2.4 only)]' 'max_read[set maximum size of read requests]:size' 'hard_remove[immediate removal (do not hide files)]' 'use_ino[let filesystem set inode numbers]' 'readdir_ino[try to fill in d_ino in readdir]' 'direct_io[use direct I/O]' 'kernel_cache[cache files in kernel]' 'umask[set file permissions]:permission mask (octal)' 'uid[set file owner]:user id:' 'gid[set file group]:group id:' 'entry_timeout[cache timeout for names]:timeout (s)' 'negative_timeout[cache timeout for deleted names]:timeout (s)' 'attr_timeout[cache timeout for attributes]:timeout (s)' ) [[ -n $cvalsvar ]] && set -- "$@" ${(P)cvalsvar} if [[ $# -eq 0 ]]; then set -- 'mount options' $fvals else set -- "$@" $fvals fi if [[ -n $state ]]; then stateset=$state state= fi _values $opts "$@" && ret=0 if [[ -n $state ]]; then compstate[restore]= elif [[ -n $stateset ]]; then state=$stateset else unset state fi return $ret