forked from mirrors/linux
		
	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
	
	 Amir Goldstein
						Amir Goldstein