/* SPDX-License-Identifier: LGPL-2.1-or-later */
%{
#include <linux/magic.h>

#include "filesystems.h"
#include "missing_magic.h"
#include "stat-util.h"

struct FilesystemMagic {
        const char *name;
        statfs_f_type_t magic[FILESYSTEM_MAGIC_MAX];
};
%}
struct FilesystemMagic;
%language=ANSI-C
%define hash-function-name filesystems_gperf_hash
%define lookup-function-name filesystems_gperf_lookup
%define slot-name name
%readonly-tables
%omit-struct-type
%struct-type
%includes
%%
apparmorfs,      {AAFS_MAGIC}
adfs,            {ADFS_SUPER_MAGIC}
affs,            {AFFS_SUPER_MAGIC}
afs,             {AFS_FS_MAGIC, AFS_SUPER_MAGIC}
anon_inodefs,    {ANON_INODE_FS_MAGIC}
autofs,          {AUTOFS_SUPER_MAGIC}
balloon-kvm,     {BALLOON_KVM_MAGIC}
bdev,            {BDEVFS_MAGIC}
binder,          {BINDERFS_SUPER_MAGIC}
binfmt_misc,     {BINFMTFS_MAGIC}
bpf,             {BPF_FS_MAGIC}
btrfs,           {BTRFS_SUPER_MAGIC}
btrfs_test_fs,   {BTRFS_TEST_MAGIC}
# cpuset's magic got reassigned to cgroupfs
cpuset,          {CGROUP_SUPER_MAGIC}
ceph,            {CEPH_SUPER_MAGIC}
cgroup2,         {CGROUP2_SUPER_MAGIC}
# note that the cgroupfs magic got reassigned from cpuset
cgroup,          {CGROUP_SUPER_MAGIC}
cifs,            {CIFS_SUPER_MAGIC, SMB2_SUPER_MAGIC}
coda,            {CODA_SUPER_MAGIC}
configfs,        {CONFIGFS_MAGIC}
cramfs,          {CRAMFS_MAGIC}
dax,             {DAXFS_MAGIC}
debugfs,         {DEBUGFS_MAGIC}
devmem,          {DEVMEM_MAGIC}
devpts,          {DEVPTS_SUPER_MAGIC}
# devtmpfs is just a special instance of tmpfs, hence it reports its magic
devtmpfs,        {TMPFS_MAGIC}
dmabuf,          {DMA_BUF_MAGIC}
ecryptfs,        {ECRYPTFS_SUPER_MAGIC}
efivarfs,        {EFIVARFS_MAGIC}
efs,             {EFS_SUPER_MAGIC}
erofs,           {EROFS_SUPER_MAGIC_V1}
# ext2 + ext3 + ext4 use the same magic
ext2,            {EXT2_SUPER_MAGIC}
ext3,            {EXT3_SUPER_MAGIC}
ext4,            {EXT4_SUPER_MAGIC}
exfat,           {EXFAT_SUPER_MAGIC}
f2fs,            {F2FS_SUPER_MAGIC}
# fuseblk is so closely related to fuse that it shares the same magic
fuseblk,         {FUSE_SUPER_MAGIC}
fuse,            {FUSE_SUPER_MAGIC}
fusectl,         {FUSE_CTL_SUPER_MAGIC}
# gfs is an old version of gfs2 and reuses the magic
gfs,             {GFS2_MAGIC}
gfs2,            {GFS2_MAGIC}
hostfs,          {HOSTFS_SUPER_MAGIC}
hpfs,            {HPFS_SUPER_MAGIC}
hugetlbfs,       {HUGETLBFS_MAGIC}
iso9660,         {ISOFS_SUPER_MAGIC}
jffs2,           {JFFS2_SUPER_MAGIC}
minix,           {MINIX_SUPER_MAGIC, MINIX_SUPER_MAGIC2, MINIX2_SUPER_MAGIC, MINIX2_SUPER_MAGIC2, MINIX3_SUPER_MAGIC}
mqueue,          {MQUEUE_MAGIC}
# msdos is an older legacy version of vfat, shares the magic
msdos,           {MSDOS_SUPER_MAGIC}
# ncp/ncpfs have been removed from the kernel, but ncpfs was the official name
ncp,             {NCP_SUPER_MAGIC}
ncpfs,           {NCP_SUPER_MAGIC}
# nfs is the old version of nfs4, and they share the same magic
nfs,             {NFS_SUPER_MAGIC}
nfs4,            {NFS_SUPER_MAGIC}
nilfs2,          {NILFS_SUPER_MAGIC}
nsfs,            {NSFS_MAGIC}
ntfs,            {NTFS_SB_MAGIC}
ntfs3,           {NTFS3_SUPER_MAGIC}
ocfs2,           {OCFS2_SUPER_MAGIC}
openpromfs,      {OPENPROM_SUPER_MAGIC}
orangefs,        {ORANGEFS_DEVREQ_MAGIC}
overlay,         {OVERLAYFS_SUPER_MAGIC}
pipefs,          {PIPEFS_MAGIC}
ppc-cmm,         {PPC_CMM_MAGIC}
proc,            {PROC_SUPER_MAGIC}
pstore,          {PSTOREFS_MAGIC}
# pvfs2 is the old version of orangefs
pvfs2,           {ORANGEFS_DEVREQ_MAGIC}
qnx4,            {QNX4_SUPER_MAGIC}
qnx6,            {QNX6_SUPER_MAGIC}
ramfs,           {RAMFS_MAGIC}
resctrl,         {RDTGROUP_SUPER_MAGIC}
reiserfs,        {REISERFS_SUPER_MAGIC}
rpc_pipefs,      {RPC_PIPEFS_SUPER_MAGIC}
secretmem,       {SECRETMEM_MAGIC}
securityfs,      {SECURITYFS_MAGIC}
selinuxfs,       {SELINUX_MAGIC}
shiftfs,         {SHIFTFS_MAGIC}
smackfs,         {SMACK_MAGIC}
# smb3 is an alias for cifs
smb3,            {CIFS_SUPER_MAGIC}
# smbfs was removed from the kernel in 2010, the magic remains
smbfs,           {SMB_SUPER_MAGIC}
sockfs,          {SOCKFS_MAGIC}
squashfs,        {SQUASHFS_MAGIC}
sysfs,           {SYSFS_MAGIC}
# note that devtmpfs shares the same magic with tmpfs, given it is just a special named instance of it.
tmpfs,           {TMPFS_MAGIC}
tracefs,         {TRACEFS_MAGIC}
udf,             {UDF_SUPER_MAGIC}
usbdevfs,        {USBDEVICE_SUPER_MAGIC}
vboxsf,          {VBOXSF_SUPER_MAGIC}
# note that msdos shares the same magic (and is the older version)
vfat,            {MSDOS_SUPER_MAGIC}
v9fs,            {V9FS_MAGIC}
xenfs,           {XENFS_SUPER_MAGIC}
xfs,             {XFS_SUPER_MAGIC}
z3fold,          {Z3FOLD_MAGIC}
zonefs,          {ZONEFS_MAGIC}
zsmalloc,        {ZSMALLOC_MAGIC}
