forked from mirrors/linux
		
	lib/string_helpers: Introduce managed variant of kasprintf_strarray()
Some of the users want to have easy way to allocate array of strings that will be automatically cleaned when associated device is gone. Introduce managed variant of kasprintf_strarray() for such use cases. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
		
							parent
							
								
									418e0a3551
								
							
						
					
					
						commit
						acdb89b6c8
					
				
					 2 changed files with 34 additions and 0 deletions
				
			
		|  | @ -7,6 +7,7 @@ | |||
| #include <linux/string.h> | ||||
| #include <linux/types.h> | ||||
| 
 | ||||
| struct device; | ||||
| struct file; | ||||
| struct task_struct; | ||||
| 
 | ||||
|  | @ -103,4 +104,6 @@ char *kstrdup_quotable_file(struct file *file, gfp_t gfp); | |||
| char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n); | ||||
| void kfree_strarray(char **array, size_t n); | ||||
| 
 | ||||
| char **devm_kasprintf_strarray(struct device *dev, const char *prefix, size_t n); | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ | |||
| #include <linux/math64.h> | ||||
| #include <linux/export.h> | ||||
| #include <linux/ctype.h> | ||||
| #include <linux/device.h> | ||||
| #include <linux/errno.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/limits.h> | ||||
|  | @ -730,6 +731,36 @@ void kfree_strarray(char **array, size_t n) | |||
| } | ||||
| EXPORT_SYMBOL_GPL(kfree_strarray); | ||||
| 
 | ||||
| struct strarray { | ||||
| 	char **array; | ||||
| 	size_t n; | ||||
| }; | ||||
| 
 | ||||
| static void devm_kfree_strarray(struct device *dev, void *res) | ||||
| { | ||||
| 	struct strarray *array = res; | ||||
| 
 | ||||
| 	kfree_strarray(array->array, array->n); | ||||
| } | ||||
| 
 | ||||
| char **devm_kasprintf_strarray(struct device *dev, const char *prefix, size_t n) | ||||
| { | ||||
| 	struct strarray *ptr; | ||||
| 
 | ||||
| 	ptr = devres_alloc(devm_kfree_strarray, sizeof(*ptr), GFP_KERNEL); | ||||
| 	if (!ptr) | ||||
| 		return ERR_PTR(-ENOMEM); | ||||
| 
 | ||||
| 	ptr->array = kasprintf_strarray(GFP_KERNEL, prefix, n); | ||||
| 	if (!ptr->array) { | ||||
| 		devres_free(ptr); | ||||
| 		return ERR_PTR(-ENOMEM); | ||||
| 	} | ||||
| 
 | ||||
| 	return ptr->array; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(devm_kasprintf_strarray); | ||||
| 
 | ||||
| /**
 | ||||
|  * strscpy_pad() - Copy a C-string into a sized buffer | ||||
|  * @dest: Where to copy the string to | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Andy Shevchenko
						Andy Shevchenko