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