Commit 75dd63c9 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Rafael J. Wysocki
Browse files

software node: clean up property_copy_string_array()



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: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent b871160f
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -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)