Re: [PATCH 02/23] lib: string_helpers: provide kfree_strarray()
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2020-09-04 16:42:45
Also in:
linux-acpi, linux-doc, lkml
On Fri, Sep 04, 2020 at 05:45:26PM +0200, Bartosz Golaszewski wrote:
quoted hunk ↗ jump to hunk
From: Bartosz Golaszewski <redacted> There's a common pattern of dynamically allocating an array of char pointers and then also dynamically allocating each string in this array. Provide a helper for freeing such a string array with one call. Signed-off-by: Bartosz Golaszewski <redacted> --- include/linux/string_helpers.h | 2 ++ lib/string_helpers.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+)diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h index 86f150c2a6b6..55b25120a1c6 100644 --- a/include/linux/string_helpers.h +++ b/include/linux/string_helpers.h@@ -94,4 +94,6 @@ char *kstrdup_quotable(const char *src, gfp_t gfp); char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp); char *kstrdup_quotable_file(struct file *file, gfp_t gfp); +void kfree_strarray(char **str_array, size_t num_str); + #endifdiff --git a/lib/string_helpers.c b/lib/string_helpers.c index 963050c0283e..22505efc6aae 100644 --- a/lib/string_helpers.c +++ b/lib/string_helpers.c@@ -649,3 +649,25 @@ char *kstrdup_quotable_file(struct file *file, gfp_t gfp) return pathname; } EXPORT_SYMBOL_GPL(kstrdup_quotable_file); + +/** + * kfree_strarray - free a number of dynamically allocated strings contained + * in an array and the array itself + * + * @str_array: Dynamically allocated array of strings to free. If NULL - the + * function does nothing. + * @num_str: Number of strings (starting from the beginning of the array) to + * free. + */ +void kfree_strarray(char **str_array, size_t num_str) +{ + unsigned int i;
+ if (!str_array) + return;
Shouldn't we expect that caller will supply NULL, 0 and above check is not needed?
+ for (i = 0; i < num_str; i++) + kfree(str_array[i]); + kfree(str_array);
+} +EXPORT_SYMBOL_GPL(kfree_strarray); -- 2.26.1
-- With Best Regards, Andy Shevchenko