| #!/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 |