139317Smckusick /* 239317Smckusick * Copyright (c) 1989 The Regents of the University of California. 339317Smckusick * All rights reserved. 439317Smckusick * 542624Sbostic * %sccs.include.redist.c% 639317Smckusick */ 739317Smckusick 839317Smckusick #if defined(LIBC_SCCS) && !defined(lint) 9*46597Sdonn static char sccsid[] = "@(#)getmntinfo.c 6.4 (Berkeley) 02/23/91"; 1039317Smckusick #endif /* LIBC_SCCS and not lint */ 1139317Smckusick 1239317Smckusick #include <sys/types.h> 1339317Smckusick #include <sys/mount.h> 14*46597Sdonn #include <stdlib.h> 1539317Smckusick 1639317Smckusick /* 1739317Smckusick * Return information about mounted filesystems. 1839317Smckusick */ 1939317Smckusick int 2040336Smckusick getmntinfo(mntbufp, flags) 2139317Smckusick struct statfs **mntbufp; 2240336Smckusick int flags; 2339317Smckusick { 2439317Smckusick static struct statfs *mntbuf; 25*46597Sdonn static int mntsize; 26*46597Sdonn static long bufsize; 2739317Smckusick 2840336Smckusick if (mntsize <= 0 && (mntsize = getfsstat(0, 0, MNT_NOWAIT)) < 0) 2939317Smckusick return (0); 3040336Smckusick if (bufsize > 0 && (mntsize = getfsstat(mntbuf, bufsize, flags)) < 0) 3139317Smckusick return (0); 3239317Smckusick while (bufsize <= mntsize * sizeof(struct statfs)) { 3339317Smckusick if (mntbuf) 3439317Smckusick free(mntbuf); 3539317Smckusick bufsize = (mntsize + 1) * sizeof(struct statfs); 3639317Smckusick if ((mntbuf = (struct statfs *)malloc(bufsize)) == 0) 3739317Smckusick return (0); 3840336Smckusick if ((mntsize = getfsstat(mntbuf, bufsize, flags)) < 0) 3939317Smckusick return (0); 4039317Smckusick } 4139317Smckusick *mntbufp = mntbuf; 4239317Smckusick return (mntsize); 4339317Smckusick } 44