]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
lib: string_helpers: provide kfree_strarray()
authorBartosz Golaszewski <bgolaszewski@baylibre.com>
Tue, 29 Sep 2020 10:09:55 +0000 (12:09 +0200)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Wed, 30 Sep 2020 08:50:30 +0000 (10:50 +0200)
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 <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
include/linux/string_helpers.h
lib/string_helpers.c

index 86f150c2a6b663dffb9fd47f89712c3ea6a8ef37..fa06dcdc481efe1e0d49173f8aa093a5c9ba4cda 100644 (file)
@@ -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 **array, size_t n);
+
 #endif
index 963050c0283e9cd1055e7a1e459cae30ae76eda8..7f2d5fbaf243f34d309a2a02a8f7a88860ef3154 100644 (file)
@@ -649,3 +649,26 @@ 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
+ *
+ * @array: Dynamically allocated array of strings to free.
+ * @n: Number of strings (starting from the beginning of the array) to free.
+ *
+ * Passing a non-NULL @array and @n == 0 as well as NULL @array are valid
+ * use-cases. If @array is NULL, the function does nothing.
+ */
+void kfree_strarray(char **array, size_t n)
+{
+       unsigned int i;
+
+       if (!array)
+               return;
+
+       for (i = 0; i < n; i++)
+               kfree(array[i]);
+       kfree(array);
+}
+EXPORT_SYMBOL_GPL(kfree_strarray);