1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-11-25 07:49:18 +00:00

Belatedly remove the getvfsent(3) API. All the consumers have been

updated to use getvfsbyname(3) or the vfs.conflist sysctl since a
long time, except mount_smbfs(8) which has just been fixed.
This commit is contained in:
Maxime Henrion 2004-04-11 21:36:31 +00:00
parent 0bf573017b
commit 4af6b50978
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=128143
4 changed files with 2 additions and 348 deletions

View File

@ -15,7 +15,7 @@ SRCS+= __xuname.c _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
gethostname.c getloadavg.c getlogin.c getmntinfo.c getnetgrent.c \
getobjformat.c getosreldate.c getpagesize.c \
getpeereid.c getprogname.c getpwent.c getttyent.c \
getusershell.c getvfsbyname.c getvfsent.c glob.c \
getusershell.c getvfsbyname.c glob.c \
initgroups.c isatty.c jrand48.c lcong48.c \
lockf.c lrand48.c mrand48.c nice.c \
nlist.c nrand48.c ntp_gettime.c opendir.c \
@ -48,7 +48,7 @@ MAN+= alarm.3 arc4random.3 \
getgrent.3 getgrouplist.3 gethostname.3 getloadavg.3 \
getmntinfo.3 getnetgrent.3 getobjformat.3 getosreldate.3 \
getpagesize.3 getpass.3 getpeereid.3 getprogname.3 getpwent.3 \
getttyent.3 getusershell.3 getvfsbyname.3 getvfsent.3 \
getttyent.3 getusershell.3 getvfsbyname.3 \
glob.3 initgroups.3 isgreater.3 ldexp.3 lockf.3 makecontext.3 \
modf.3 msgctl.3 msgget.3 msgrcv.3 msgsnd.3 \
nice.3 nlist.3 pause.3 popen.3 pselect.3 psignal.3 pwcache.3 \
@ -103,9 +103,6 @@ MLINKS+=getttyent.3 endttyent.3 getttyent.3 getttynam.3 \
getttyent.3 isdialuptty.3 getttyent.3 isnettty.3 \
getttyent.3 setttyent.3
MLINKS+=getusershell.3 endusershell.3 getusershell.3 setusershell.3
MLINKS+=getvfsent.3 endvfsent.3 getvfsent.3 getvfsbytype.3 \
getvfsent.3 setvfsent.3 getvfsent.3 vfsisloadable.3 \
getvfsent.3 vfsload.3
MLINKS+=glob.3 globfree.3
MLINKS+=isgreater.3 isgreaterequal.3 isgreater.3 isless.3 \
isgreater.3 islessequal.3 isgreater.3 islessgreater.3 \

View File

@ -1,187 +0,0 @@
.\" $FreeBSD$
.\" Written by Garrett A. Wollman, September 1994.
.\" This manual page is in the public domain.
.\"
.Dd September 24, 1994
.Dt GETVFSENT 3
.Os
.Sh NAME
.Nm getvfsent ,
.Nm setvfsent ,
.Nm endvfsent ,
.Nm vfsisloadable ,
.Nm vfsload
.Nd manage virtual file system modules
.Sh LIBRARY
.Lb libc
.Sh SYNOPSIS
.In sys/param.h
.In sys/mount.h
.Ft struct ovfsconf *
.Fn getvfsent "void"
.Ft void
.Fn setvfsent "int cachelist"
.Ft void
.Fn endvfsent "void"
.Ft int
.Fn vfsisloadable "const char *name"
.Ft int
.Fn vfsload "const char *name"
.Sh DESCRIPTION
The
.Fn getvfsent
function provides convenient access to a list of installed virtual
file system modules managed by the kernel. It steps through the
list of file systems one at a time. A null pointer is returned when
no more data is available. The fields in a
.Dq Li struct ovfsconf
are as follows:
.Pp
.Bl -tag -compact -width vfc_refcount
.It vfc_name
the name of the file system
.It vfc_index
the file system type number assigned by the kernel and used in calls to
.Xr mount 2
.It vfc_refcount
the number of references to this file system
(usually the number of mounts, but one greater for file systems which
cannot be unloaded or which are statically linked into the kernel)
.It vfc_flags
flag bits
.El
.Pp
The flags are defined as follows:
.Pp
.Bl -tag -width VFCF_SYNTHETIC -compact
.It Dv VFCF_STATIC
statically compiled into kernel
.It Dv VFCF_NETWORK
may get data over the network
.It Dv VFCF_READONLY
writes are not implemented
.It Dv VFCF_SYNTHETIC
data does not represent real files
.It Dv VFCF_LOOPBACK
aliases some other mounted FS
.It Dv VFCF_UNICODE
stores file names as Unicode
.El
.Pp
The
.Fn setvfsent
and
.Fn endvfsent
functions are used to control caching of the file system list, which is
obtained in toto from the kernel via
.Xr sysctl 3 .
If the
.Fa cachelist
argument to
.Fn setvfsent
is non-zero, the list will be retrieved only once, upon the first call
to one of the retrieval functions, until
.Fn endvfsent
is called to clear the cache. In general,
.Fn setvfsent 1
should be called by programs using the
.Fn getvfsent
function, and
.Fn setvfsent 0
(which is also the default state)
should be called by programs using the
.Fn vfsload
function.
.Pp
The
.Fn vfsisloadable
function returns a non-zero value if a later call to
.Fn vfsload name
is likely to succeed. We say
.Dq likely
because
.Fn vfsisloadable
does not check any of the conditions necessary for
.Fn vfsload
to succeed.
.Pp
The
.Fn vfsload
function attempts to load a kernel module implementing file system
.Fa name .
It returns zero if the file system module was successfully located and
loaded, or non-zero otherwise. It should only be called in the
following circumstances:
.Bl -enum
.It
The
.Fn getvfsbyname
function
has been called and returned a non-zero value.
.It
The
.Fn vfsisloadable
function
has been called and returned a non-zero value.
.El
.Pp
Here is an example, taken from the source to
.Xr mount_cd9660 8 :
.Bd -literal -offset indent
struct vfsconf *vfc;
int error;
/* setup code here */
error = getvfsbyname("cd9660", &vfc);
if (error && vfsisloadable("cd9660")) {
if (vfsload("cd9660"))
err(EX_OSERR, "vfsload(cd9660)");
endvfsent(); /* flush cache */
error = getvfsbyname("cd9660", &vfc);
}
if (error)
errx(1, "cd9660 filesystem is not available");
if (mount(vfc.vfc_name, dir, mntflags, &args) < 0)
err(1, NULL);
.Ed
.Sh RETURN VALUES
The
.Fn getvfsent
routine returns a pointer to a static data structure when
it succeeds, and returns a null pointer when it fails. On failure,
.Va errno
may be set to one of the values documented for
.Xr sysctl 3
or
.Xr malloc 3 ,
if a failure of that function was the cause; otherwise
.Va errno
will be unmodified.
.Pp
The
.Fn vfsload
function returns a non-zero value on failure, or zero on success. If
.Fn vfsload
fails,
.Va errno
may be set to one of the values documented for
.Xr kldload 2 .
.Sh SEE ALSO
.Xr kldload 2 ,
.Xr mount 2 ,
.Xr mount 8
.Sh AUTHORS
.An -nosplit
The loadable file system support was written by
.An Garrett A. Wollman ,
based on generic loadable kernel module support by
.An Terry Lambert .
.Sh HISTORY
The
.Fn getvfsent
family of functions first appeared in
.Fx 2.0 .

View File

@ -1,150 +0,0 @@
/*
* getvfsent.c - get a listing of installed filesystems
* Written September 1994 by Garrett A. Wollman
* This file is in the public domain.
*
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/types.h>
#include <sys/linker.h>
#include <sys/mount.h>
#include <sys/sysctl.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/wait.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <paths.h>
/* XXX hide some compatibility problems. */
#define vfsconf ovfsconf
static struct vfsconf *_vfslist = 0;
static struct vfsconf _vfsconf;
static size_t _vfslistlen = 0;
static int _vfs_keeplist = 0;
static int _vfs_index = 0;
static int
initvfs(void)
{
int mib[2] = { CTL_VFS, VFS_VFSCONF };
size_t size = 0;
int rv;
rv = sysctl(mib, 2, (void *)0, &size, (void *)0, (size_t)0);
if(rv < 0)
return 0;
if(_vfslist)
free(_vfslist);
_vfslist = malloc(size);
if(!_vfslist)
return 0;
rv = sysctl(mib, 2, _vfslist, &size, (void *)0, (size_t)0);
if(rv < 0) {
free(_vfslist);
_vfslist = 0;
return 0;
}
_vfslistlen = size / sizeof _vfslist[0];
return 1;
}
struct vfsconf *
getvfsent(void)
{
if(!_vfslist && !initvfs()) {
return 0;
}
do {
if(_vfs_index >= _vfslistlen) {
return 0;
}
_vfsconf = _vfslist[_vfs_index++];
} while(!_vfsconf.vfc_vfsops);
if(!_vfs_keeplist) {
free(_vfslist);
_vfslist = 0;
}
return &_vfsconf;
}
struct vfsconf *
getvfsbytype(int type)
{
int i;
if(!_vfslist && !initvfs()) {
return 0;
}
for(i = 0; i < _vfslistlen; i++) {
if(_vfslist[i].vfc_index == type)
break;
}
if(i < _vfslistlen) {
_vfsconf = _vfslist[i];
}
if(!_vfs_keeplist) {
free(_vfslist);
_vfslist = 0;
}
if(i < _vfslistlen) {
return &_vfsconf;
} else {
return 0;
}
}
void
setvfsent(int keep)
{
if(_vfslist && !keep) {
free(_vfslist);
_vfslist = 0;
}
_vfs_keeplist = keep;
_vfs_index = 0;
}
void
endvfsent(void)
{
if(_vfslist) {
free(_vfslist);
_vfslist = 0;
}
_vfs_index = 0;
}
int
vfsisloadable(const char *name)
{
return 1;
}
int
vfsload(const char *name)
{
int status;
status = kldload(name);
return status == -1 ? status : 0;
}

View File

@ -555,13 +555,7 @@ int statfs(const char *, struct statfs *);
int unmount(const char *, int);
/* C library stuff */
void endvfsent(void);
int getvfsbyname(const char *, struct xvfsconf *);
struct ovfsconf *getvfsbytype(int);
struct ovfsconf *getvfsent(void);
void setvfsent(int);
int vfsisloadable(const char *);
int vfsload(const char *);
__END_DECLS
#endif /* _KERNEL */