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