1bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* 2d059297112922cabb0c674840589be8db821fd9aAdam Langley * Copyright (c) 2008,2014 Darren Tucker <dtucker@zip.com.au> 3bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 4bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Permission to use, copy, modify, and distribute this software for any 5bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * purpose with or without fee is hereby granted, provided that the above 6bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * copyright notice and this permission notice appear in all copies. 7bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 8bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER 13bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 14bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */ 16bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 17bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include "includes.h" 18bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 19d059297112922cabb0c674840589be8db821fd9aAdam Langley#if !defined(HAVE_STATVFS) || !defined(HAVE_FSTATVFS) 20d059297112922cabb0c674840589be8db821fd9aAdam Langley 21bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include <sys/types.h> 22bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 23d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifdef HAVE_SYS_MOUNT_H 24d059297112922cabb0c674840589be8db821fd9aAdam Langley#include <sys/mount.h> 25d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif 26bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef HAVE_SYS_STATFS_H 27bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include <sys/statfs.h> 28bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 29bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 30bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef HAVE_FSBLKCNT_T 31bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmantypedef unsigned long fsblkcnt_t; 32bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 33bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef HAVE_FSFILCNT_T 34bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmantypedef unsigned long fsfilcnt_t; 35bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 36bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 37bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef ST_RDONLY 38bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define ST_RDONLY 1 39bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 40bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef ST_NOSUID 41bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define ST_NOSUID 2 42bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 43bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 44bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* as defined in IEEE Std 1003.1, 2004 Edition */ 45bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanstruct statvfs { 46bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman unsigned long f_bsize; /* File system block size. */ 47bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman unsigned long f_frsize; /* Fundamental file system block size. */ 48bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman fsblkcnt_t f_blocks; /* Total number of blocks on file system in */ 49bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* units of f_frsize. */ 50bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman fsblkcnt_t f_bfree; /* Total number of free blocks. */ 51bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman fsblkcnt_t f_bavail; /* Number of free blocks available to */ 52bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* non-privileged process. */ 53bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman fsfilcnt_t f_files; /* Total number of file serial numbers. */ 54bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman fsfilcnt_t f_ffree; /* Total number of free file serial numbers. */ 55bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman fsfilcnt_t f_favail; /* Number of file serial numbers available to */ 56bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* non-privileged process. */ 57bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman unsigned long f_fsid; /* File system ID. */ 58bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman unsigned long f_flag; /* BBit mask of f_flag values. */ 59bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman unsigned long f_namemax;/* Maximum filename length. */ 60bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 61bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 62bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 63bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef HAVE_STATVFS 64bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint statvfs(const char *, struct statvfs *); 65bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 66bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 67bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef HAVE_FSTATVFS 68bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint fstatvfs(int, struct statvfs *); 69bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 70