mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02: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
					
				
					 2 changed files with 31 additions and 5 deletions
				
			
		| 
						 | 
					@ -192,17 +192,19 @@ int vfs_parse_fs_string(struct fs_context *fc, const char *key,
 | 
				
			||||||
EXPORT_SYMBOL(vfs_parse_fs_string);
 | 
					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.
 | 
					 * @fc: The superblock configuration to fill in.
 | 
				
			||||||
 * @data: The data to parse
 | 
					 * @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
 | 
					 * Parse a blob of data that's in key[=val][,key[=val]]* form with a custom
 | 
				
			||||||
 * called from the ->monolithic_mount_data() fs_context operation.
 | 
					 * option separator callback.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Returns 0 on success or the error returned by the ->parse_option() fs_context
 | 
					 * Returns 0 on success or the error returned by the ->parse_option() fs_context
 | 
				
			||||||
 * operation on failure.
 | 
					 * 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;
 | 
						char *options = data, *key;
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
| 
						 | 
					@ -214,7 +216,7 @@ int generic_parse_monolithic(struct fs_context *fc, void *data)
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while ((key = strsep(&options, ",")) != NULL) {
 | 
						while ((key = sep(&options)) != NULL) {
 | 
				
			||||||
		if (*key) {
 | 
							if (*key) {
 | 
				
			||||||
			size_t v_len = 0;
 | 
								size_t v_len = 0;
 | 
				
			||||||
			char *value = strchr(key, '=');
 | 
								char *value = strchr(key, '=');
 | 
				
			||||||
| 
						 | 
					@ -233,6 +235,28 @@ int generic_parse_monolithic(struct fs_context *fc, void *data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						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);
 | 
					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_param(struct fs_context *fc, struct fs_parameter *param);
 | 
				
			||||||
extern int vfs_parse_fs_string(struct fs_context *fc, const char *key,
 | 
					extern int vfs_parse_fs_string(struct fs_context *fc, const char *key,
 | 
				
			||||||
			       const char *value, size_t v_size);
 | 
								       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 generic_parse_monolithic(struct fs_context *fc, void *data);
 | 
				
			||||||
extern int vfs_get_tree(struct fs_context *fc);
 | 
					extern int vfs_get_tree(struct fs_context *fc);
 | 
				
			||||||
extern void put_fs_context(struct fs_context *fc);
 | 
					extern void put_fs_context(struct fs_context *fc);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue