1*f7167e0eSDag-Erling Smørgrav /* $Id: bsd-statvfs.c,v 1.2 2014/01/17 07:10:59 dtucker Exp $ */ 2d4af9e69SDag-Erling Smørgrav 3d4af9e69SDag-Erling Smørgrav /* 4*f7167e0eSDag-Erling Smørgrav * Copyright (c) 2008,2014 Darren Tucker <dtucker@zip.com.au> 5d4af9e69SDag-Erling Smørgrav * 6d4af9e69SDag-Erling Smørgrav * Permission to use, copy, modify, and distribute this software for any 7d4af9e69SDag-Erling Smørgrav * purpose with or without fee is hereby granted, provided that the above 8d4af9e69SDag-Erling Smørgrav * copyright notice and this permission notice appear in all copies. 9d4af9e69SDag-Erling Smørgrav * 10d4af9e69SDag-Erling Smørgrav * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11d4af9e69SDag-Erling Smørgrav * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12d4af9e69SDag-Erling Smørgrav * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13d4af9e69SDag-Erling Smørgrav * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14d4af9e69SDag-Erling Smørgrav * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER 15d4af9e69SDag-Erling Smørgrav * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 16d4af9e69SDag-Erling Smørgrav * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17d4af9e69SDag-Erling Smørgrav */ 18d4af9e69SDag-Erling Smørgrav 19d4af9e69SDag-Erling Smørgrav #include "includes.h" 20d4af9e69SDag-Erling Smørgrav 21*f7167e0eSDag-Erling Smørgrav #if !defined(HAVE_STATVFS) || !defined(HAVE_FSTATVFS) 22*f7167e0eSDag-Erling Smørgrav 23*f7167e0eSDag-Erling Smørgrav #include <sys/param.h> 24*f7167e0eSDag-Erling Smørgrav #ifdef HAVE_SYS_MOUNT_H 25*f7167e0eSDag-Erling Smørgrav # include <sys/mount.h> 26*f7167e0eSDag-Erling Smørgrav #endif 27*f7167e0eSDag-Erling Smørgrav 28d4af9e69SDag-Erling Smørgrav #include <errno.h> 29d4af9e69SDag-Erling Smørgrav 30*f7167e0eSDag-Erling Smørgrav static void 31*f7167e0eSDag-Erling Smørgrav copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from) 32*f7167e0eSDag-Erling Smørgrav { 33*f7167e0eSDag-Erling Smørgrav to->f_bsize = from->f_bsize; 34*f7167e0eSDag-Erling Smørgrav to->f_frsize = from->f_bsize; /* no exact equivalent */ 35*f7167e0eSDag-Erling Smørgrav to->f_blocks = from->f_blocks; 36*f7167e0eSDag-Erling Smørgrav to->f_bfree = from->f_bfree; 37*f7167e0eSDag-Erling Smørgrav to->f_bavail = from->f_bavail; 38*f7167e0eSDag-Erling Smørgrav to->f_files = from->f_files; 39*f7167e0eSDag-Erling Smørgrav to->f_ffree = from->f_ffree; 40*f7167e0eSDag-Erling Smørgrav to->f_favail = from->f_ffree; /* no exact equivalent */ 41*f7167e0eSDag-Erling Smørgrav to->f_fsid = 0; /* XXX fix me */ 42*f7167e0eSDag-Erling Smørgrav to->f_flag = from->f_flags; 43*f7167e0eSDag-Erling Smørgrav to->f_namemax = MNAMELEN; 44*f7167e0eSDag-Erling Smørgrav } 45*f7167e0eSDag-Erling Smørgrav 46d4af9e69SDag-Erling Smørgrav # ifndef HAVE_STATVFS 47d4af9e69SDag-Erling Smørgrav int statvfs(const char *path, struct statvfs *buf) 48d4af9e69SDag-Erling Smørgrav { 49*f7167e0eSDag-Erling Smørgrav # ifdef HAVE_STATFS 50*f7167e0eSDag-Erling Smørgrav struct statfs fs; 51*f7167e0eSDag-Erling Smørgrav 52*f7167e0eSDag-Erling Smørgrav memset(&fs, 0, sizeof(fs)); 53*f7167e0eSDag-Erling Smørgrav if (statfs(path, &fs) == -1) 54*f7167e0eSDag-Erling Smørgrav return -1; 55*f7167e0eSDag-Erling Smørgrav copy_statfs_to_statvfs(buf, &fs); 56*f7167e0eSDag-Erling Smørgrav return 0; 57*f7167e0eSDag-Erling Smørgrav # else 58d4af9e69SDag-Erling Smørgrav errno = ENOSYS; 59d4af9e69SDag-Erling Smørgrav return -1; 60*f7167e0eSDag-Erling Smørgrav # endif 61d4af9e69SDag-Erling Smørgrav } 62d4af9e69SDag-Erling Smørgrav # endif 63d4af9e69SDag-Erling Smørgrav 64d4af9e69SDag-Erling Smørgrav # ifndef HAVE_FSTATVFS 65d4af9e69SDag-Erling Smørgrav int fstatvfs(int fd, struct statvfs *buf) 66d4af9e69SDag-Erling Smørgrav { 67*f7167e0eSDag-Erling Smørgrav # ifdef HAVE_FSTATFS 68*f7167e0eSDag-Erling Smørgrav struct statfs fs; 69*f7167e0eSDag-Erling Smørgrav 70*f7167e0eSDag-Erling Smørgrav memset(&fs, 0, sizeof(fs)); 71*f7167e0eSDag-Erling Smørgrav if (fstatfs(fd, &fs) == -1) 72*f7167e0eSDag-Erling Smørgrav return -1; 73*f7167e0eSDag-Erling Smørgrav copy_statfs_to_statvfs(buf, &fs); 74*f7167e0eSDag-Erling Smørgrav return 0; 75*f7167e0eSDag-Erling Smørgrav # else 76d4af9e69SDag-Erling Smørgrav errno = ENOSYS; 77d4af9e69SDag-Erling Smørgrav return -1; 78*f7167e0eSDag-Erling Smørgrav # endif 79d4af9e69SDag-Erling Smørgrav } 80d4af9e69SDag-Erling Smørgrav # endif 81*f7167e0eSDag-Erling Smørgrav 82*f7167e0eSDag-Erling Smørgrav #endif 83