free_mntarg kernel_mount kernel_vmount mount_arg mount_argb mount_argf mount_argsu - functions provided as part of the kernel mount interface
The header of the structure is stored in src/sys/kern/vfs_mount.c which permits automatic structure creation to ease the mount process. Memory allocation must always be freed when the entire process is complete, it is an error otherwise.
The
free_mntarg ();
function is used to free or clear the
Vt mntarg
structure.
The
kernel_mount ();
function pulls information from the structure to perform
the mount request on a given file system.
Additionally, the
kernel_mount ();
function always calls the
free_mntarg ();
function.
If
Fa ma
contains any error code generated during the construction,
that code will be called and the file system mount will
not be attempted.
The
kernel_vmount ();
is a function similar to
printf(9)
which is used to mount a file system.
The
mount_arg ();
function takes a plain argument and crafts parts of
the structure with regards to various mount options.
If the length is a value less than 0,
strlen(3)
is used.
This argument will be referenced until either
free_mntarg ();
or
kernel_mount ();
is called.
The
mount_argb ();
function is used to add boolean arguments to
the structure.
The
Fa flag
is the boolean value and
Fa name
must start with
Qq Li no ,
otherwise a panic will occur.
The
mount_argf ();
function adds
printf(9)
style arguments to the current structure.
The
mount_argsu ();
function will add arguments to the structure from a
userland string.
static int
msdosfs_cmount(struct mntarg *ma, void *data, int flags, struct thread *td)
{
struct msdosfs_args args;
int error;
if (data == NULL)
return (EINVAL);
error = copyin(data, &args, sizeof args);
if (error)
return (error);
ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
ma = mount_arg(ma, "export", &args.export, sizeof args.export);
ma = mount_argf(ma, "uid", "%d", args.uid);
ma = mount_argf(ma, "gid", "%d", args.gid);
ma = mount_argf(ma, "mask", "%d", args.mask);
ma = mount_argf(ma, "dirmask", "%d", args.dirmask);
ma = mount_argb(ma, args.flags & MSDOSFSMNT_SHORTNAME, "noshortname");
ma = mount_argb(ma, args.flags & MSDOSFSMNT_LONGNAME, "nolongname");
ma = mount_argb(ma, !(args.flags & MSDOSFSMNT_NOWIN95), "nowin95");
ma = mount_argb(ma, args.flags & MSDOSFSMNT_KICONV, "nokiconv");
ma = mount_argsu(ma, "cs_win", args.cs_win, MAXCSLEN);
ma = mount_argsu(ma, "cs_dos", args.cs_dos, MAXCSLEN);
ma = mount_argsu(ma, "cs_local", args.cs_local, MAXCSLEN);
error = kernel_mount(ma, flags);
return (error);
}
When working with
kernel_vmount (,);
Fa varargs
must come in pairs, e.g.,
Br q Va name , value .
error = kernel_vmount(
MNT_RDONLY,
"fstype", vfsname,
"fspath", "/",
"from", path,
NULL);
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |