Commit 27473620 authored by Antonio Nino Diaz's avatar Antonio Nino Diaz
Browse files

Introduce new fdt helper to read string properties



Introduced fdtw_read_string() to read string properties.

Change-Id: I854eef0390632cf2eaddd2dce60cdb98c117de43
Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
parent b4cf974a
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <debug.h> #include <debug.h>
#include <fdt_wrappers.h> #include <fdt_wrappers.h>
#include <libfdt.h> #include <libfdt.h>
#include <string.h>
/* /*
* Read cells from a given property of the given node. At most 2 cells of the * Read cells from a given property of the given node. At most 2 cells of the
...@@ -61,6 +62,38 @@ int fdtw_read_cells(const void *dtb, int node, const char *prop, ...@@ -61,6 +62,38 @@ int fdtw_read_cells(const void *dtb, int node, const char *prop,
return 0; return 0;
} }
/*
* Read string from a given property of the given node. Up to 'size - 1'
* characters are read, and a NUL terminator is added. Returns 0 on success,
* and -1 upon error.
*/
int fdtw_read_string(const void *dtb, int node, const char *prop,
char *str, size_t size)
{
const char *ptr;
size_t len;
assert(dtb != NULL);
assert(node >= 0);
assert(prop != NULL);
assert(str != NULL);
assert(size > 0U);
ptr = fdt_getprop_namelen(dtb, node, prop, (int)strlen(prop), NULL);
if (ptr == NULL) {
WARN("Couldn't find property %s in dtb\n", prop);
return -1;
}
len = strlcpy(str, ptr, size);
if (len >= size) {
WARN("String of property %s in dtb has been truncated\n", prop);
return -1;
}
return 0;
}
/* /*
* Write cells in place to a given property of the given node. At most 2 cells * Write cells in place to a given property of the given node. At most 2 cells
* of the property are written. Returns 0 on success, and -1 upon error. * of the property are written. Returns 0 on success, and -1 upon error.
......
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
int fdtw_read_cells(const void *dtb, int node, const char *prop, int fdtw_read_cells(const void *dtb, int node, const char *prop,
unsigned int cells, void *value); unsigned int cells, void *value);
int fdtw_read_string(const void *dtb, int node, const char *prop,
char *str, size_t size);
int fdtw_write_inplace_cells(void *dtb, int node, const char *prop, int fdtw_write_inplace_cells(void *dtb, int node, const char *prop,
unsigned int cells, void *value); unsigned int cells, void *value);
#endif /* __FDT_WRAPPERS__ */ #endif /* __FDT_WRAPPERS__ */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment