/* * Copyright (c) 1989 The Regents of the University of California. * All rights reserved. * * %sccs.include.redist.c% */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)getmntinfo.c 6.5 (Berkeley) 11/19/91"; #endif /* LIBC_SCCS and not lint */ #include #include #include #include /* * Return information about mounted filesystems. */ int getmntinfo(mntbufp, flags) struct statfs **mntbufp; int flags; { static struct statfs *mntbuf; static int mntsize; static long bufsize; if (mntsize <= 0 && (mntsize = getfsstat(0, 0, MNT_NOWAIT)) < 0) return (0); if (bufsize > 0 && (mntsize = getfsstat(mntbuf, bufsize, flags)) < 0) return (0); while (bufsize <= mntsize * sizeof(struct statfs)) { if (mntbuf) free(mntbuf); bufsize = (mntsize + 1) * sizeof(struct statfs); if ((mntbuf = (struct statfs *)malloc(bufsize)) == 0) return (0); if ((mntsize = getfsstat(mntbuf, bufsize, flags)) < 0) return (0); } *mntbufp = mntbuf; return (mntsize); }