+mount_print(mp)
+ struct mount *mp;
+{
+ char *type = "unknown";
+ register flags;
+
+#define ST mp->mnt_stat
+ printf("*** MOUNT ");
+ switch (ST.f_type) {
+ case MOUNT_NONE:
+ type = "none";
+ break;
+ case MOUNT_UFS:
+ type = "ufs";
+ break;
+ case MOUNT_NFS:
+ type = "nfs";
+ break;
+ case MOUNT_MFS:
+ type = "mfs";
+ break;
+ case MOUNT_PC:
+ type = "pc";
+ break;
+ }
+ printf("%s %s on %s", type, ST.f_mntfromname, ST.f_mntonname);
+ if (flags = mp->mnt_flag) {
+ char *comma = "(";
+
+ putchar(' ');
+ /* user visable flags */
+ if (flags & MNT_RDONLY) {
+ printf("%srdonly", comma);
+ flags &= ~MNT_RDONLY;
+ comma = ",";
+ }
+ if (flags & MNT_SYNCHRONOUS) {
+ printf("%ssynchronous", comma);
+ flags &= ~MNT_SYNCHRONOUS;
+ comma = ",";
+ }
+ if (flags & MNT_NOEXEC) {
+ printf("%snoexec", comma);
+ flags &= ~MNT_NOEXEC;
+ comma = ",";
+ }
+ if (flags & MNT_NOSUID) {
+ printf("%snosuid", comma);
+ flags &= ~MNT_NOSUID;
+ comma = ",";
+ }
+ if (flags & MNT_NODEV) {
+ printf("%snodev", comma);
+ flags &= ~MNT_NODEV;
+ comma = ",";
+ }
+ if (flags & MNT_EXPORTED) {
+ printf("%sexport", comma);
+ flags &= ~MNT_EXPORTED;
+ comma = ",";
+ }
+ if (flags & MNT_EXRDONLY) {
+ printf("%sexrdonly", comma);
+ flags &= ~MNT_EXRDONLY;
+ comma = ",";
+ }
+ if (flags & MNT_LOCAL) {
+ printf("%slocal", comma);
+ flags &= ~MNT_LOCAL;
+ comma = ",";
+ }
+ if (flags & MNT_QUOTA) {
+ printf("%squota", comma);
+ flags &= ~MNT_QUOTA;
+ comma = ",";
+ }
+ /* filesystem control flags */
+ if (flags & MNT_UPDATE) {
+ printf("%supdate", comma);
+ flags &= ~MNT_UPDATE;
+ comma = ",";
+ }
+ if (flags & MNT_MLOCK) {
+ printf("%slock", comma);
+ flags &= ~MNT_MLOCK;
+ comma = ",";
+ }
+ if (flags & MNT_MWAIT) {
+ printf("%swait", comma);
+ flags &= ~MNT_MWAIT;
+ comma = ",";
+ }
+ if (flags & MNT_MPBUSY) {
+ printf("%sbusy", comma);
+ flags &= ~MNT_MPBUSY;
+ comma = ",";
+ }
+ if (flags & MNT_MPWANT) {
+ printf("%swant", comma);
+ flags &= ~MNT_MPWANT;
+ comma = ",";
+ }
+ if (flags & MNT_UNMOUNT) {
+ printf("%sunmount", comma);
+ flags &= ~MNT_UNMOUNT;
+ comma = ",";
+ }
+ if (flags)
+ printf("%sunknown_flags:%x", flags);
+ printf(")");
+ }
+ printf("\n");
+#undef ST
+}
+
+struct e_vnode *
+loadvnodes(avnodes)
+ int *avnodes;
+{
+ int ret, copysize, i;
+ struct e_vnode *vnodebase;
+
+ if (fcore != NULL) {
+ error("vnodes on dead kernel, not impl yet\n");
+ exit(1);
+ }
+ if ((ret = getkerninfo(KINFO_VNODE, NULL, NULL, 0)) == -1) {
+ syserror("can't get estimate for kerninfo");
+ exit(1);
+ }
+ copysize = ret;
+ if ((vnodebase = (struct e_vnode *)malloc(copysize))
+ == NULL) {
+ error("out of memory");
+ exit(1);
+ }
+ if ((ret = getkerninfo(KINFO_VNODE, vnodebase, ©size, 0))
+ == -1) {
+ syserror("can't get vnode list");
+ exit(1);
+ }
+ if (copysize % sizeof (struct e_vnode)) {
+ error("vnode size mismatch");
+ error(1);
+ }
+ *avnodes = copysize / sizeof (struct e_vnode);
+
+ return (vnodebase);
+}
+
+u_long
+getword(loc)