Module Name: src Committed By: christos Date: Sun Sep 22 23:18:53 UTC 2019
Added Files: src/sys/compat/sys: statvfs.h Log Message: new files for statvfs90 To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/compat/sys/statvfs.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Added files: Index: src/sys/compat/sys/statvfs.h diff -u /dev/null src/sys/compat/sys/statvfs.h:1.1 --- /dev/null Sun Sep 22 19:18:53 2019 +++ src/sys/compat/sys/statvfs.h Sun Sep 22 19:18:53 2019 @@ -0,0 +1,161 @@ +/* $NetBSD: statvfs.h,v 1.1 2019/09/22 23:18:53 christos Exp $ */ + +/*- + * Copyright (c) 2019 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _COMPAT_SYS_STATVFS_H_ +#define _COMPAT_SYS_STATVFS_H_ + +#include <sys/statvfs.h> + +struct statvfs90 { + unsigned long f_flag; /* copy of mount exported flags */ + unsigned long f_bsize; /* file system block size */ + unsigned long f_frsize; /* fundamental file system block size */ + unsigned long f_iosize; /* optimal file system block size */ + + /* The following are in units of f_frsize */ + fsblkcnt_t f_blocks; /* number of blocks in file system, */ + fsblkcnt_t f_bfree; /* free blocks avail in file system */ + fsblkcnt_t f_bavail; /* free blocks avail to non-root */ + fsblkcnt_t f_bresvd; /* blocks reserved for root */ + + fsfilcnt_t f_files; /* total file nodes in file system */ + fsfilcnt_t f_ffree; /* free file nodes in file system */ + fsfilcnt_t f_favail; /* free file nodes avail to non-root */ + fsfilcnt_t f_fresvd; /* file nodes reserved for root */ + + uint64_t f_syncreads; /* count of sync reads since mount */ + uint64_t f_syncwrites; /* count of sync writes since mount */ + + uint64_t f_asyncreads; /* count of async reads since mount */ + uint64_t f_asyncwrites; /* count of async writes since mount */ + + fsid_t f_fsidx; /* NetBSD compatible fsid */ + unsigned long f_fsid; /* Posix compatible fsid */ + unsigned long f_namemax; /* maximum filename length */ + uid_t f_owner; /* user that mounted the file system */ + + uint32_t f_spare[4]; /* spare space */ + + char f_fstypename[_VFS_NAMELEN]; /* fs type name */ + char f_mntonname[_VFS_MNAMELEN]; /* directory on which mounted */ + char f_mntfromname[_VFS_MNAMELEN]; /* mounted file system */ +}; + +__BEGIN_DECLS +#ifndef _KERNEL +#include <string.h> +#endif + +static __inline void +statvfs_to_statvfs90(const struct statvfs *s, struct statvfs90 *s90) +{ + s90->f_flag = s->f_flag; + s90->f_bsize = s->f_bsize; + s90->f_frsize = s->f_frsize; + s90->f_iosize = s->f_iosize; + + s90->f_blocks = s->f_blocks; + s90->f_bfree = s->f_bfree; + s90->f_bavail = s->f_bavail; + s90->f_bresvd = s->f_bresvd; + + s90->f_files = s->f_files; + s90->f_ffree = s->f_ffree; + s90->f_favail = s->f_favail; + s90->f_fresvd = s->f_fresvd; + + s90->f_syncreads = s->f_syncreads; + s90->f_syncwrites = s->f_syncwrites; + + s90->f_asyncreads = s->f_asyncreads; + s90->f_asyncwrites = s->f_asyncwrites; + + s90->f_fsidx = s->f_fsidx; + s90->f_fsid = s->f_fsid; + s90->f_namemax = s->f_namemax; + s90->f_owner = s->f_owner; + + memcpy(s90->f_fstypename, s->f_fstypename, sizeof(s90->f_fstypename)); + memcpy(s90->f_mntonname, s->f_mntonname, sizeof(s90->f_mntonname)); + memcpy(s90->f_mntfromname, s->f_mntfromname, sizeof(s90->f_mntfromname)); +} + +#ifdef _KERNEL +static __inline int +statvfs_to_statvfs90_copy(const void *vs, void *vs90, size_t l) +{ + struct statvfs90 *s90 = STATVFSBUF_GET(); + int error; + + statvfs_to_statvfs90(vs, s90); + error = copyout(s90, vs90, l); + STATVFSBUF_PUT(s90); + + return error; +} +#else + +#ifdef __LIBC12_SOURCE__ + +int __compat_statvfs(const char *__restrict, struct statvfs90 *__restrict); +int __compat_statvfs1(const char *__restrict, struct statvfs90 *__restrict, + int); + +int __compat_fstatvfs(int, struct statvfs90 *); +int __compat_fstatvfs1(int, struct statvfs90 *, int); + +int __compat___getmntinfo13(struct statvfs90 **, int); + +int __compat___fhstatvfs40(const void *, size_t, struct statvfs90 *); +int __compat___fhstatvfs140(const void *, size_t, struct statvfs90 *, int); + +int __compat_getvfsstat(struct statvfs90 *, size_t, int); + +int __statvfs90(const char *__restrict, struct statvfs *__restrict); +int __statvfs190(const char *__restrict, struct statvfs *__restrict, int); + +int __fstatvfs90(int, struct statvfs *); +int __fstatvfs190(int, struct statvfs *, int); + +int __fhstatvfs90(const void *, size_t, struct statvfs *); +int __fhstatvfs190(const void *, size_t, struct statvfs *, int); + +int __getvfsstat90(struct statvfs *, size_t, int); + +int __getmntinfo90(struct statvfs **, int); + +#endif /* __LIBC12_SOURCE__ */ + +#endif /* _KERNEL */ + +__END_DECLS + +#endif /* !_SYS_STATVFS_H_ */