logo

utils-std

Collection of commonly available Unix tools git clone https://anongit.hacktivis.me/git/utils-std.git/
commit: 8ea6e9f38d660dcc920717b6944b85fa669d562f
parent b49d3dbb5062e097365381c9a1bc623a31db662c
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sat, 28 Jun 2025 05:11:00 +0200

cmd/df: limit mnt_type include/exclude to 128 rather than 4096

Diffstat:

Mcmd/df.c31+++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/cmd/df.c b/cmd/df.c @@ -19,6 +19,15 @@ #include <sys/statvfs.h> #include <unistd.h> // getopt +#define STR(s) #s + +/* + * Rough idea of builtin filesystems in Linux 6.12.31: + * $ grep -RI '\bregister_filesystem(' /usr/src/linux/fs/ | wc -l + * 79 + */ +#define DF_MNT_TYPE_MAX 128 + // Grabbed from OpenRC rc-functions.sh // clang-format off static const char *net_fs_list[] = { @@ -46,10 +55,10 @@ main(int argc, char *argv[]) int fs_col_width = 20; size_t excluded_count = 0; - char *excluded[4096]; + static char *excluded[DF_MNT_TYPE_MAX]; size_t only_count = 0; - char *only[4096]; + static char *only[DF_MNT_TYPE_MAX]; for(int c = -1; (c = getopt_nolong(argc, argv, ":ahilPkTt:x:")) != -1;) { @@ -80,9 +89,27 @@ main(int argc, char *argv[]) opt_T = true; break; case 't': + if(only_count >= (DF_MNT_TYPE_MAX - 1)) + { + fprintf( + stderr, + "%s: error: Can only select up to " STR(DF_MNT_TYPE_MAX) " mnt_types via option `-t`\n", + argv0); + return 1; + } + only[only_count++] = optarg; break; case 'x': + if(excluded_count >= (DF_MNT_TYPE_MAX - 1)) + { + fprintf( + stderr, + "%s: error: Can only select up to " STR(DF_MNT_TYPE_MAX) " mnt_types via option `-x`\n", + argv0); + return 1; + } + excluded[excluded_count++] = optarg; break; case ':':