mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
fs: factor out vfs_parse_monolithic_sep() helper
Factor out vfs_parse_monolithic_sep() from generic_parse_monolithic(), so filesystems could use it with a custom option separator callback. Acked-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
This commit is contained in:
parent
94f6f0550c
commit
e001d1447c
@ -192,17 +192,19 @@ int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
||||
EXPORT_SYMBOL(vfs_parse_fs_string);
|
||||
|
||||
/**
|
||||
* generic_parse_monolithic - Parse key[=val][,key[=val]]* mount data
|
||||
* vfs_parse_monolithic_sep - Parse key[=val][,key[=val]]* mount data
|
||||
* @fc: The superblock configuration to fill in.
|
||||
* @data: The data to parse
|
||||
* @sep: callback for separating next option
|
||||
*
|
||||
* Parse a blob of data that's in key[=val][,key[=val]]* form. This can be
|
||||
* called from the ->monolithic_mount_data() fs_context operation.
|
||||
* Parse a blob of data that's in key[=val][,key[=val]]* form with a custom
|
||||
* option separator callback.
|
||||
*
|
||||
* Returns 0 on success or the error returned by the ->parse_option() fs_context
|
||||
* operation on failure.
|
||||
*/
|
||||
int generic_parse_monolithic(struct fs_context *fc, void *data)
|
||||
int vfs_parse_monolithic_sep(struct fs_context *fc, void *data,
|
||||
char *(*sep)(char **))
|
||||
{
|
||||
char *options = data, *key;
|
||||
int ret = 0;
|
||||
@ -214,7 +216,7 @@ int generic_parse_monolithic(struct fs_context *fc, void *data)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
while ((key = strsep(&options, ",")) != NULL) {
|
||||
while ((key = sep(&options)) != NULL) {
|
||||
if (*key) {
|
||||
size_t v_len = 0;
|
||||
char *value = strchr(key, '=');
|
||||
@ -233,6 +235,28 @@ int generic_parse_monolithic(struct fs_context *fc, void *data)
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vfs_parse_monolithic_sep);
|
||||
|
||||
static char *vfs_parse_comma_sep(char **s)
|
||||
{
|
||||
return strsep(s, ",");
|
||||
}
|
||||
|
||||
/**
|
||||
* generic_parse_monolithic - Parse key[=val][,key[=val]]* mount data
|
||||
* @fc: The superblock configuration to fill in.
|
||||
* @data: The data to parse
|
||||
*
|
||||
* Parse a blob of data that's in key[=val][,key[=val]]* form. This can be
|
||||
* called from the ->monolithic_mount_data() fs_context operation.
|
||||
*
|
||||
* Returns 0 on success or the error returned by the ->parse_option() fs_context
|
||||
* operation on failure.
|
||||
*/
|
||||
int generic_parse_monolithic(struct fs_context *fc, void *data)
|
||||
{
|
||||
return vfs_parse_monolithic_sep(fc, data, vfs_parse_comma_sep);
|
||||
}
|
||||
EXPORT_SYMBOL(generic_parse_monolithic);
|
||||
|
||||
/**
|
||||
|
@ -136,6 +136,8 @@ extern struct fs_context *vfs_dup_fs_context(struct fs_context *fc);
|
||||
extern int vfs_parse_fs_param(struct fs_context *fc, struct fs_parameter *param);
|
||||
extern int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
||||
const char *value, size_t v_size);
|
||||
int vfs_parse_monolithic_sep(struct fs_context *fc, void *data,
|
||||
char *(*sep)(char **));
|
||||
extern int generic_parse_monolithic(struct fs_context *fc, void *data);
|
||||
extern int vfs_get_tree(struct fs_context *fc);
|
||||
extern void put_fs_context(struct fs_context *fc);
|
||||
|
Loading…
Reference in New Issue
Block a user