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 2847dd1d1bSDag-Erling Smørgrav #ifndef MNAMELEN 2947dd1d1bSDag-Erling Smørgrav # define MNAMELEN 32 3047dd1d1bSDag-Erling Smørgrav #endif 3147dd1d1bSDag-Erling Smørgrav 32*19261079SEd Maste #ifdef HAVE_STRUCT_STATFS_F_FILES 33*19261079SEd Maste # define HAVE_STRUCT_STATFS 34*19261079SEd Maste #endif 35*19261079SEd Maste 36*19261079SEd Maste #ifdef HAVE_STRUCT_STATFS 37f7167e0eSDag-Erling Smørgrav static void 38f7167e0eSDag-Erling Smørgrav copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from) 39f7167e0eSDag-Erling Smørgrav { 40f7167e0eSDag-Erling Smørgrav to->f_bsize = from->f_bsize; 41f7167e0eSDag-Erling Smørgrav to->f_frsize = from->f_bsize; /* no exact equivalent */ 42f7167e0eSDag-Erling Smørgrav to->f_blocks = from->f_blocks; 43f7167e0eSDag-Erling Smørgrav to->f_bfree = from->f_bfree; 44f7167e0eSDag-Erling Smørgrav to->f_bavail = from->f_bavail; 45f7167e0eSDag-Erling Smørgrav to->f_files = from->f_files; 46f7167e0eSDag-Erling Smørgrav to->f_ffree = from->f_ffree; 47f7167e0eSDag-Erling Smørgrav to->f_favail = from->f_ffree; /* no exact equivalent */ 48f7167e0eSDag-Erling Smørgrav to->f_fsid = 0; /* XXX fix me */ 4947dd1d1bSDag-Erling Smørgrav #ifdef HAVE_STRUCT_STATFS_F_FLAGS 50f7167e0eSDag-Erling Smørgrav to->f_flag = from->f_flags; 5147dd1d1bSDag-Erling Smørgrav #else 5247dd1d1bSDag-Erling Smørgrav to->f_flag = 0; 5347dd1d1bSDag-Erling Smørgrav #endif 54f7167e0eSDag-Erling Smørgrav to->f_namemax = MNAMELEN; 55f7167e0eSDag-Erling Smørgrav } 56*19261079SEd Maste #endif 57f7167e0eSDag-Erling Smørgrav 58d4af9e69SDag-Erling Smørgrav # ifndef HAVE_STATVFS 59d4af9e69SDag-Erling Smørgrav int statvfs(const char *path, struct statvfs *buf) 60d4af9e69SDag-Erling Smørgrav { 61*19261079SEd Maste # if defined(HAVE_STATFS) && defined(HAVE_STRUCT_STATFS) 62f7167e0eSDag-Erling Smørgrav struct statfs fs; 63f7167e0eSDag-Erling Smørgrav 64f7167e0eSDag-Erling Smørgrav memset(&fs, 0, sizeof(fs)); 65f7167e0eSDag-Erling Smørgrav if (statfs(path, &fs) == -1) 66f7167e0eSDag-Erling Smørgrav return -1; 67f7167e0eSDag-Erling Smørgrav copy_statfs_to_statvfs(buf, &fs); 68f7167e0eSDag-Erling Smørgrav return 0; 69f7167e0eSDag-Erling Smørgrav # else 70d4af9e69SDag-Erling Smørgrav errno = ENOSYS; 71d4af9e69SDag-Erling Smørgrav return -1; 72f7167e0eSDag-Erling Smørgrav # endif 73d4af9e69SDag-Erling Smørgrav } 74d4af9e69SDag-Erling Smørgrav # endif 75d4af9e69SDag-Erling Smørgrav 76d4af9e69SDag-Erling Smørgrav # ifndef HAVE_FSTATVFS 77d4af9e69SDag-Erling Smørgrav int fstatvfs(int fd, struct statvfs *buf) 78d4af9e69SDag-Erling Smørgrav { 79*19261079SEd Maste # if defined(HAVE_FSTATFS) && defined(HAVE_STRUCT_STATFS) 80f7167e0eSDag-Erling Smørgrav struct statfs fs; 81f7167e0eSDag-Erling Smørgrav 82f7167e0eSDag-Erling Smørgrav memset(&fs, 0, sizeof(fs)); 83f7167e0eSDag-Erling Smørgrav if (fstatfs(fd, &fs) == -1) 84f7167e0eSDag-Erling Smørgrav return -1; 85f7167e0eSDag-Erling Smørgrav copy_statfs_to_statvfs(buf, &fs); 86f7167e0eSDag-Erling Smørgrav return 0; 87f7167e0eSDag-Erling Smørgrav # else 88d4af9e69SDag-Erling Smørgrav errno = ENOSYS; 89d4af9e69SDag-Erling Smørgrav return -1; 90f7167e0eSDag-Erling Smørgrav # endif 91d4af9e69SDag-Erling Smørgrav } 92d4af9e69SDag-Erling Smørgrav # endif 93f7167e0eSDag-Erling Smørgrav 94f7167e0eSDag-Erling Smørgrav #endif 95