software node: clean up property_copy_string_array()
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 23 Oct 2019 20:02:23 +0000 (13:02 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 5 Nov 2019 22:18:10 +0000 (23:18 +0100)
Because property_copy_string_array() stores the newly allocated pointer in the
destination property, we have an awkward code in property_entry_copy_data()
where we fetch the new pointer from dst.

Let's change property_copy_string_array() to return pointer and rely on the
common path in property_entry_copy_data() to store it in destination structure.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/swnode.c

index 12ca439..f41692e 100644 (file)
@@ -337,8 +337,8 @@ static void property_entry_free_data(const struct property_entry *p)
        kfree(p->name);
 }
 
-static int property_copy_string_array(struct property_entry *dst,
-                                     const struct property_entry *src)
+static const char * const *
+property_copy_string_array(const struct property_entry *src)
 {
        const char **d;
        size_t nval = src->length / sizeof(*d);
@@ -346,7 +346,7 @@ static int property_copy_string_array(struct property_entry *dst,
 
        d = kcalloc(nval, sizeof(*d), GFP_KERNEL);
        if (!d)
-               return -ENOMEM;
+               return NULL;
 
        for (i = 0; i < nval; i++) {
                d[i] = kstrdup(src->pointer.str[i], GFP_KERNEL);
@@ -354,12 +354,11 @@ static int property_copy_string_array(struct property_entry *dst,
                        while (--i >= 0)
                                kfree(d[i]);
                        kfree(d);
-                       return -ENOMEM;
+                       return NULL;
                }
        }
 
-       dst->pointer.str = d;
-       return 0;
+       return d;
 }
 
 static int property_entry_copy_data(struct property_entry *dst,
@@ -367,17 +366,15 @@ static int property_entry_copy_data(struct property_entry *dst,
 {
        const void *pointer = property_get_pointer(src);
        const void *new;
-       int error;
 
        if (src->is_array) {
                if (!src->length)
                        return -ENODATA;
 
                if (src->type == DEV_PROP_STRING) {
-                       error = property_copy_string_array(dst, src);
-                       if (error)
-                               return error;
-                       new = dst->pointer.str;
+                       new = property_copy_string_array(src);
+                       if (!new)
+                               return -ENOMEM;
                } else {
                        new = kmemdup(pointer, src->length, GFP_KERNEL);
                        if (!new)