On Fri, Feb 14, 2025 at 09:22:54AM +0100, Thomas Klausner wrote: > Perhaps we need to add code like FreeBSD has (to rust libc): > https://github.com/rust-lang/libc/blob/2258bf0fb96767bcffbe3ed09b29a31ee54b549b/src/unix/bsd/freebsdlike/freebsd/mod.rs#L5340
Your rust binary calls __getvfsstat90 (according to ktrace), so the definition in C is nt getvfsstat(struct statvfs *, size_t, int) __RENAME(__getvfsstat90); and the argument needs to be an array of struct statvfs. The equivalent C code should be something like: --- #include <stdio.h> #include <sys/statvfs.h> int main(int argc, char **argv) { struct statvfs buf[20]; int ret = getvfsstat(buf, sizeof buf, ST_WAIT); printf("ret %d\n", ret); return 0; } --- (at least ktrace shows the same syscall for this) and this returns: (gdb) p buf[0] $2 = {f_flag = 20480, f_bsize = 32768, f_frsize = 4096, f_iosize = 32768, f_blocks = 116136549, f_bfree = 112048364, f_bavail = 106241537, f_bresvd = 5806827, f_files = 29092606, f_ffree = 28605067, f_favail = 28605067, f_fresvd = 0, f_syncreads = 267410, f_syncwrites = 12497, f_asyncreads = 2, f_asyncwrites = 4423, f_fsidx = { __fsid_val = {43008, 1931}}, f_fsid = 43008, f_namemax = 255, f_owner = 0, f_spare = {0, 0, 0, 0}, f_fstypename = "ffs", '\000' <repeats 28 times>, f_mntonname = "/", '\000' <repeats 1022 times>, f_mntfromname = "/dev/dk0", '\000' <repeats 1015 times>, f_mntfromlabel = "G5root", '\000' <repeats 1017 times>} so the problem must be with the rust libc definition of the struct. Martin