mirror of
https://github.com/torvalds/linux
synced 2024-09-06 09:51:23 +00:00
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
|
@ -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