summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmel <mmel@FreeBSD.org>2016-01-20 14:49:01 +0000
committermmel <mmel@FreeBSD.org>2016-01-20 14:49:01 +0000
commit6e7de4e62d91d27501e4a843047a5841c78d8ebf (patch)
treecb646887405c057708810fc86d272ea3b91b59b3
parent213b19938247e53d7030cf3aa10d740d20146a9a (diff)
downloadFreeBSD-src-6e7de4e62d91d27501e4a843047a5841c78d8ebf.zip
FreeBSD-src-6e7de4e62d91d27501e4a843047a5841c78d8ebf.tar.gz
OFW: Fix ofw_bus_string_list_to_array() function.
Originally committed version was unfinished and didn't work at all, because I took it from the wrong WIP branch by mistake. Approved by: kib (mentor)
-rw-r--r--sys/dev/ofw/ofw_bus_subr.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/dev/ofw/ofw_bus_subr.c b/sys/dev/ofw/ofw_bus_subr.c
index 60a341c..dafaaed 100644
--- a/sys/dev/ofw/ofw_bus_subr.c
+++ b/sys/dev/ofw/ofw_bus_subr.c
@@ -716,9 +716,10 @@ ofw_bus_find_string_index(phandle_t node, const char *list_name,
*/
int
ofw_bus_string_list_to_array(phandle_t node, const char *list_name,
- const char ***array)
+ const char ***out_array)
{
char *elems, *tptr;
+ const char **array;
int i, cnt, nelems, len;
elems = NULL;
@@ -731,11 +732,11 @@ ofw_bus_string_list_to_array(phandle_t node, const char *list_name,
i += strlen(elems + i) + 1;
/* Allocate space for arrays and all strings. */
- *array = malloc((cnt + 1) * sizeof(char *) + nelems, M_OFWPROP,
+ array = malloc((cnt + 1) * sizeof(char *) + nelems, M_OFWPROP,
M_WAITOK);
/* Get address of first string. */
- tptr = (char *)(*array + cnt);
+ tptr = (char *)(array + cnt + 1);
/* Copy strings. */
memcpy(tptr, elems, nelems);
@@ -743,12 +744,13 @@ ofw_bus_string_list_to_array(phandle_t node, const char *list_name,
/* Fill string pointers. */
for (i = 0, cnt = 0; i < nelems; cnt++) {
- len = strlen(tptr + i) + 1;
- *array[cnt] = tptr;
+ len = strlen(tptr) + 1;
+ array[cnt] = tptr;
i += len;
tptr += len;
}
- *array[cnt] = 0;
+ array[cnt] = 0;
+ *out_array = array;
return (cnt);
}
OpenPOWER on IntegriCloud