github.com/afumu/libc@v0.0.6/musl/src/stat/statvfs.c (about) 1 #include <sys/statvfs.h> 2 #include <sys/statfs.h> 3 #include "syscall.h" 4 5 static int __statfs(const char *path, struct statfs *buf) 6 { 7 *buf = (struct statfs){0}; 8 #ifdef SYS_statfs64 9 return syscall(SYS_statfs64, path, sizeof *buf, buf); 10 #else 11 return syscall(SYS_statfs, path, buf); 12 #endif 13 } 14 15 static int __fstatfs(int fd, struct statfs *buf) 16 { 17 *buf = (struct statfs){0}; 18 #ifdef SYS_fstatfs64 19 return syscall(SYS_fstatfs64, fd, sizeof *buf, buf); 20 #else 21 return syscall(SYS_fstatfs, fd, buf); 22 #endif 23 } 24 25 weak_alias(__statfs, statfs); 26 weak_alias(__fstatfs, fstatfs); 27 28 static void fixup(struct statvfs *out, const struct statfs *in) 29 { 30 *out = (struct statvfs){0}; 31 out->f_bsize = in->f_bsize; 32 out->f_frsize = in->f_frsize ? in->f_frsize : in->f_bsize; 33 out->f_blocks = in->f_blocks; 34 out->f_bfree = in->f_bfree; 35 out->f_bavail = in->f_bavail; 36 out->f_files = in->f_files; 37 out->f_ffree = in->f_ffree; 38 out->f_favail = in->f_ffree; 39 out->f_fsid = in->f_fsid.__val[0]; 40 out->f_flag = in->f_flags; 41 out->f_namemax = in->f_namelen; 42 } 43 44 int statvfs(const char *restrict path, struct statvfs *restrict buf) 45 { 46 struct statfs kbuf; 47 if (__statfs(path, &kbuf)<0) return -1; 48 fixup(buf, &kbuf); 49 return 0; 50 } 51 52 int fstatvfs(int fd, struct statvfs *buf) 53 { 54 struct statfs kbuf; 55 if (__fstatfs(fd, &kbuf)<0) return -1; 56 fixup(buf, &kbuf); 57 return 0; 58 } 59 60 weak_alias(statvfs, statvfs64); 61 weak_alias(statfs, statfs64); 62 weak_alias(fstatvfs, fstatvfs64); 63 weak_alias(fstatfs, fstatfs64);