1#autoload
2
3local expl fss
4
5case $OSTYPE in
6  aix*) fss=( jfs nfs cdrfs ) ;;
7  irix*) fss=( efs proc fd nfs iso9660 dos hfs cachefs xfs ) ;;
8  linux*)
9    typeset -aU fss
10    fss=( adfs bfs cramfs ext2 ext3 hfs hpfs iso9660 minix ntfs qnx4
11          reiserfs romfs swap udf ufs vxfs xfs xiafs )
12    [[ -r /proc/filesystems ]] &&
13        fss+=( ${$(</proc/filesystems)#nodev} )
14    [[ -r /etc/filesystems ]] &&
15        fss+=( ${${${(f)"$(</etc/filesystems)"}:#\#*}#\*} )
16  ;;
17  osf*) fss=( advfs ufs nfs mfs cdfs ) ;;
18  solaris*) fss=( ufs nfs hsfs s5fs pcfs cachefs tmpfs ) ;;
19  dragonfly*)
20    fss=( cd9660 devfs ext2fs fdesc kernfs linprocfs mfs msdos nfs
21          ntfs null nwfs portal procfs std udf ufs umap union )
22  ;;
23  freebsd*)
24    fss=( ${${(f)"$(_call_program fstypes lsvfs)"}[3,-1]%% *} ) ||
25    fss=( cd9660 devfs ext2fs fdescfs kernfs linprocfs linsysfs mfs msdosfs nfs
26    ntfs nullfs nwfs portalfs procfs smbfs std tmpfs udf ufs unionfs
27    reiserfs xfs zfs )
28  ;;
29  darwin*)
30    fss=( autofs /sbin/mount_*(#qN-*:s./sbin/mount_.) )
31  ;;
32  *)
33    # default for all other systems
34    fss=( ufs )
35  ;;
36esac
37
38_wanted fstypes expl 'file system type' compadd "$@" -M 'L:|no=' -a "$@" - fss
39