|
Message-ID: <20230624043939.GC3630668@port70.net> Date: Sat, 24 Jun 2023 06:39:39 +0200 From: Szabolcs Nagy <nsz@...t70.net> To: наб <nabijaczleweli@...ijaczleweli.xyz> Cc: musl@...ts.openwall.com Subject: Re: [PATCH] [f]statvfs: allocate spare for f_type * наб <nabijaczleweli@...ijaczleweli.xyz> [2023-06-23 22:36:11 +0200]: > This is the only missing part in struct statvfs. > The LSB calls [f]statfs() deprecated, and its weird types are definitely > off-putting. However, its use is required to get f_type. > > Instead, allocate one of the six spares to f_type, > copied directly from struct statfs. > This then becomes a small extension to the standard interface on Linux, > instead of two different interfaces, one of which is quite odd due to > being an ABI type, and there no longer is any reason to use statfs(). > > The underlying kernel type is a mess, but all architectures agree on u32 > (or more) for the ABI, and all filesystem magicks are 32-bit integers. > > Link: https://lore.kernel.org/linux-man/f54kudgblgk643u32tb6at4cd3kkzha6hslahv24szs4raroaz@ogivjbfdaqtb/t/#u fwiw this looks good to me assuming the glibc patch gets accepted: https://patchwork.sourceware.org/project/glibc/patch/169a6ec2a9957495275964afd0697fa3aea1c6b6.1687552604.git.nabijaczleweli@nabijaczleweli.xyz/ > --- > include/sys/statvfs.h | 3 ++- > src/stat/statvfs.c | 1 + > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/include/sys/statvfs.h b/include/sys/statvfs.h > index 57a6b806..71d9d1f9 100644 > --- a/include/sys/statvfs.h > +++ b/include/sys/statvfs.h > @@ -23,7 +23,8 @@ struct statvfs { > unsigned long f_fsid; > #endif > unsigned long f_flag, f_namemax; > - int __reserved[6]; > + unsigned int f_type; > + int __reserved[5]; > }; > > int statvfs (const char *__restrict, struct statvfs *__restrict); > diff --git a/src/stat/statvfs.c b/src/stat/statvfs.c > index bfbb5fee..bc12da8b 100644 > --- a/src/stat/statvfs.c > +++ b/src/stat/statvfs.c > @@ -39,6 +39,7 @@ static void fixup(struct statvfs *out, const struct statfs *in) > out->f_fsid = in->f_fsid.__val[0]; > out->f_flag = in->f_flags; > out->f_namemax = in->f_namelen; > + out->f_type = in->f_type; > } > > int statvfs(const char *restrict path, struct statvfs *restrict buf) > -- > 2.39.2
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.