/* 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}
pidfs,           {PID_FS_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}