diff options
Diffstat (limited to 'src/basic/generate-filesystem-switch-case.py')
-rwxr-xr-x | src/basic/generate-filesystem-switch-case.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/basic/generate-filesystem-switch-case.py b/src/basic/generate-filesystem-switch-case.py new file mode 100755 index 0000000..bbd0922 --- /dev/null +++ b/src/basic/generate-filesystem-switch-case.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1-or-later + +import sys + + +def filter_fsname(name): + # File system magics are sometimes not unique, because file systems got new + # revisions or got renamed. Let's prefer newer over older here, and thus + # ignore the old names. + + return name in { + "cpuset", # magic taken over by cgroupfs + "devtmpfs", # not a file system of its own, but just a "named superblock" of tmpfs + "ext2", # ext4 is the newest revision of ext2 + ext3 + "ext3", + "fuseblk", # closely related to fuse; they share a single magic, but the latter is more common + "gfs", # magic taken over by gfs2 + "msdos", # vfat is the newest revision of msdos + "ncp", # ncpfs (not ncp) was the last name of the netware `file_system_type` + # name before it was removed in 2018 + "nfs", # nfs4 is the newest revision of nfs + "pvfs2", # orangefs is the new name of pvfs2 + "smb3", # smb3 is an alias for cifs + } + + +gperf_file = sys.argv[1] +keywords_section = False + +for line in open(gperf_file): + if line[0] == "#": + continue + + if keywords_section: + name, ids = line.split(",", 1) + + name = name.strip() + if filter_fsname(name): + continue + + ids = ids.strip() + assert ids[0] == "{" + assert ids[-1] == "}" + ids = ids[1:-1] + + for id in ids.split(","): + print(f"case (statfs_f_type_t) {id.strip()}:") + + print(f' return "{name}";') + + if line.startswith("%%"): + keywords_section = True |