lsvfs.c revision 99112
1295367Sdes/*
257429Smarkm * lsvfs - list loaded VFSes
357429Smarkm * Garrett A. Wollman, September 1994
457429Smarkm * This file is in the public domain.
557429Smarkm *
665674Skris */
760576Skris
865674Skris#include <sys/cdefs.h>
965674Skris__FBSDID("$FreeBSD: head/usr.bin/lsvfs/lsvfs.c 99112 2002-06-30 05:25:07Z obrien $");
1065674Skris
1165674Skris#define _NEW_VFSCONF
1265674Skris
1360576Skris#include <sys/param.h>
1460576Skris#include <sys/mount.h>
1592559Sdes
1665674Skris#include <err.h>
1765674Skris#include <stdio.h>
1865674Skris#include <string.h>
1965674Skris
2065674Skris#define FMT "%-32.32s %5d %s\n"
2165674Skris#define HDRFMT "%-32.32s %5.5s %s\n"
2265674Skris#define DASHES "-------------------------------- ----- ---------------\n"
2365674Skris
2465674Skrisstatic const char *fmt_flags(int);
2565674Skris
2665674Skrisint
2765674Skrismain(int argc, char **argv)
2865674Skris{
2965674Skris  int rv = 0;
3065674Skris  struct vfsconf vfc;
3165674Skris  struct ovfsconf *ovfcp;
3265674Skris  argc--, argv++;
3365674Skris
3465674Skris  setvfsent(1);
3565674Skris
3665674Skris  printf(HDRFMT, "Filesystem", "Refs", "Flags");
3757429Smarkm  fputs(DASHES, stdout);
3857429Smarkm
3957429Smarkm  if(argc) {
4057429Smarkm    for(; argc; argc--, argv++) {
41162856Sdes      if (getvfsbyname(*argv, &vfc) == 0) {
42295367Sdes        printf(FMT, vfc.vfc_name, vfc.vfc_refcount, fmt_flags(vfc.vfc_flags));
43162856Sdes      } else {
44162856Sdes	warnx("VFS %s unknown or not loaded", *argv);
45162856Sdes        rv++;
46295367Sdes      }
47162856Sdes    }
48162856Sdes  } else {
49162856Sdes    while ((ovfcp = getvfsent()) != NULL) {
50162856Sdes      printf(FMT, ovfcp->vfc_name, ovfcp->vfc_refcount,
51162856Sdes             fmt_flags(ovfcp->vfc_flags));
52295367Sdes    }
53295367Sdes  }
54162856Sdes
55162856Sdes  endvfsent();
5658582Skris  return rv;
57295367Sdes}
5858582Skris
5976262Sgreenstatic const char *
60221420Sdesfmt_flags(int flags)
61295367Sdes{
62262566Sdes  /*
63264377Sdes   * NB: if you add new flags, don't forget to add them here vvvvvv too.
6457429Smarkm   */
65221420Sdes  static char buf[sizeof
66221420Sdes    "static, network, read-only, synthetic, loopback, unicode"];
67221420Sdes  int comma = 0;
68221420Sdes
69221420Sdes  buf[0] = '\0';
70295367Sdes
71295367Sdes  if(flags & VFCF_STATIC) {
72147005Sdes    if(comma++) strcat(buf, ", ");
73255767Sdes    strcat(buf, "static");
74147005Sdes  }
75147005Sdes
76147005Sdes  if(flags & VFCF_NETWORK) {
77147005Sdes    if(comma++) strcat(buf, ", ");
78147005Sdes    strcat(buf, "network");
79147005Sdes  }
80147005Sdes
81147005Sdes  if(flags & VFCF_READONLY) {
82147005Sdes    if(comma++) strcat(buf, ", ");
83147005Sdes    strcat(buf, "read-only");
84147005Sdes  }
85147005Sdes
86147005Sdes  if(flags & VFCF_SYNTHETIC) {
87147005Sdes    if(comma++) strcat(buf, ", ");
88147005Sdes    strcat(buf, "synthetic");
89147005Sdes  }
90147005Sdes
91147005Sdes  if(flags & VFCF_LOOPBACK) {
92147005Sdes    if(comma++) strcat(buf, ", ");
93147005Sdes    strcat(buf, "loopback");
94147005Sdes  }
95147005Sdes
96147005Sdes  if(flags & VFCF_UNICODE) {
97147005Sdes    if(comma++) strcat(buf, ", ");
98147005Sdes    strcat(buf, "unicode");
99147005Sdes  }
100147005Sdes
101147005Sdes  return buf;
102147005Sdes}
103147005Sdes