mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02: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:
@@ -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
|
||||
|
Reference in New Issue
Block a user