summaryrefslogtreecommitdiff
path: root/lib/libc/statvfs/fstatvfs.c
blob: e228de837dd982263a99b851bfcc928fd6fa6aa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28



#include <__statvfs.h>		// for __statvfs
#include <asm-generic/statfs.h> // for statfs
#include <syscall.h>		// for __syscall_2, syscall

int fstatvfs(int fildes, struct __statvfs *buf)
{
	struct statfs statfs = { 0 };

	if (syscall(fstatfs, fildes, &statfs) < 0)
		return -1;

	buf->f_bsize = statfs.f_bsize;
	buf->f_frsize = statfs.f_frsize ? statfs.f_frsize : statfs.f_bsize;
	buf->f_blocks = statfs.f_blocks;
	buf->f_bfree = statfs.f_bfree;
	buf->f_bavail = statfs.f_bavail;
	buf->f_files = statfs.f_files;
	buf->f_ffree = statfs.f_ffree;
	buf->f_favail = statfs.f_ffree;
	buf->f_fsid = statfs.f_fsid.val[0];
	buf->f_flag = statfs.f_flags;
	buf->f_namemax = statfs.f_namelen;

	return 0;
}