EN JA
VFS_GETOPT(9)
VFS_GETOPT(9) FreeBSD Kernel Developer's Manual VFS_GETOPT(9)

名称

vfs_getopt, vfs_getopts, vfs_flagopt, vfs_scanopt, vfs_copyopt, vfs_filteropt, vfs_setopt, vfs_setopt_part, vfs_setoptsマウントオプションとそれらの値を操作する

書式

#include < sys/param.h>
#include < sys/mount.h>

int
vfs_getopt( struct vfsoptlist *opts, const char *name, void **buf, int *len);

char *
vfs_getops( struct vfsoptlist *opts, const char *name, int *error);

int
vfs_flagopt( struct vfsoptlist *opts, const char *name, uint64_t *flags, uint64_t flag);

int
vfs_scanopt( struct vfsoptlist *opts, const char *name, const char *fmt, ...);

int
vfs_copyopt( struct vfsoptlist *opts, const char *name, void *dest, int len);

int
vfs_filteropt( struct vfsoptlist *opts, const char **legal);

int
vfs_setopt( struct vfsoptlist *opts, const char *name, void *value, int len);

int
vfs_setopt_part( struct vfsoptlist *opts, const char *name, void *value, int len);

int
vfs_setopts( struct vfsoptlist *opts, const char *name, const char *value);

解説

vfs_getopt() 関数は、 buf に指定されたマウントオプションの値を指すように設定し、それが NULL でないなら len に値の長さを設定します。 buf 引数は、実際の値を指して、解放される必要はありません (そして、たぶん、変更するべきではありません)。

vfs_getopts() 関数は、それが文字列 (すなわち、 ヌル文字 で終了する) であるなら、指定されたオプションの値を返します。

vfs_flagopt() 関数は、オプションが存在するかどうか決定します。オプションが存在して、 flagsNULL でないなら、 flag は、 flags に既に設定されたものに追加されます。オプションが存在していなくて、 flagsNULL でないなら、 flag は、 flags に既に設定されたもから取り除かれます。一般的な使用法の例は、次の通りです:

if (vfs_flagopt(mp->mnt_optnew, "wormlike", NULL, 0)) 
 vfs_flagopt(mp->mnt_optnew, "appendok", &(mp->flags), F_APPENDOK);

vfs_scanopt() 関数は、指定された可変引数に与えられた形式を使用して、オプションの値をつけて vsscanf(3) を実行します。値は、文字列でなければなりません (すなわち、 ヌル文字 で終了する)。

vfs_copyopt() 関数は、オプションの値のコピーを作成します。 len 引数は、オプションの値の長さと正確に一致しなければなりません (すなわち、大きなバッファで、 vfs_copyout() は、 EINVAL で失敗します)。

vfs_filteropt() 関数は、未知のオプションが指定されなかったことを確認します。その名前が正当な名前のリスト中の名前の 1 つに一致するなら、オプションは、有効です。オプションは、'no' を前に付けることができ、それでも、有効であると見なされます。

vfs_setopt() と vfs_setopt_part() 関数は、オプションの値に新しいデータをコピーします。 vfs_setopt() では、 len 引数は、正確にオプションの値の長さにマッチしなければなりません (すなわち、大きめのバッファは、まだ vfs_copyout() が EINVAL で失敗します)。

vfs_setopts() 関数は、オプションの値に新しい文字列をコピーします。 ヌル バイトを含む文字列は、オプションの長さより長くなってはいけません。

戻り値

vfs_getopt() 関数は、オプションが見つけられたなら、0 を返します。そうでなければ、 ENOENT を返します。

vfs_getops() 関数は、 ヌル文字 で終了する指定されたオプションが見つかるなら、それを返します。オプションは、見つけられたが、 ヌル文字 で終了していないなら、 error は、 EINVAL に設定され、 NULL が返されます。オプションが見つからなかったなら、 error に 0 を設定し、 NULL が返されます。

vfs_flagopt() 関数は、オプションが見つかったなら、1 を返し、見つからなかったなら、0 を返します。

vfs_scanopt() 関数は、オプションが見つからなかったか、または ヌル文字 で終了していないなら、0 を返します。そうでなければ、 vsscanf(3) の返り値を返します。 vsscanf(3) が 0 を返すなら、それは、変更せずに返されます。したがって、0 の返り値は、オプションが存在しないか、または有効な文字列ではないことを常に意味するというわけではありません。

vfs_copyopt() と vfs_setopt() 関数は、コピーが成功するなら、0 を返し、オプションが見つけられるが、長さが一致しなければ、 EINVAL を返し、オプションが見つけられないなら、 ENOENT を返します。

vfs_filteropt() 関数は、すべてのオプションが正当であるなら、0 を返します。そうでなければ、 EINVAL が返されます。

vfs_setopts() 関数は、コピーが成功すれば、0 を返し、オプションが見つけられなかったが、文字列が長過ぎるなら、 EINVAL を返し、そして、オプションが見つけられなかったなら、 ENOENT を返します。

作者

このマニュアルページは、 Chad David <davidc@FreeBSD.org>と Ruslan Ermilov <ru@FreeBSD.org>によって書かれました。
July 31, 2011 FreeBSD