mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-13 16:27:39 -04:00
fdt: Add functions to retrieve strings
Given a device tree node, a property name and an index, the new function fdt_stringlist_get() will return a pointer to the index'th string in the property's value and return its length (or an error code on failure) in an output argument. Signed-off-by: Thierry Reding <treding@nvidia.com> [Fix some -Wshadow warnings --dwg] Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
8702bd1d3b
commit
604e61e081
3 changed files with 105 additions and 0 deletions
|
@ -58,6 +58,13 @@ static void check_expected_failure(const void *fdt, const char *path,
|
|||
err = fdt_stringlist_search(fdt, offset, "#address-cells", "");
|
||||
if (err != 0)
|
||||
FAIL("empty string not found in #address-cells: %d\n", err);
|
||||
|
||||
/*
|
||||
* fdt_get_string() can successfully extract strings from non-string
|
||||
* properties. This is because it doesn't necessarily parse the whole
|
||||
* property value, which would be necessary for it to determine if a
|
||||
* valid string or string list is present.
|
||||
*/
|
||||
}
|
||||
|
||||
static void check_string_count(const void *fdt, const char *path,
|
||||
|
@ -96,6 +103,27 @@ static void check_string_index(const void *fdt, const char *path,
|
|||
string, property, path, err, idx);
|
||||
}
|
||||
|
||||
static void check_string(const void *fdt, const char *path,
|
||||
const char *property, int idx,
|
||||
const char *string)
|
||||
{
|
||||
const char *result;
|
||||
int offset, len;
|
||||
|
||||
offset = fdt_path_offset(fdt, path);
|
||||
if (offset < 0)
|
||||
FAIL("Couldn't find path %s", path);
|
||||
|
||||
result = fdt_stringlist_get(fdt, offset, property, idx, &len);
|
||||
if (!result)
|
||||
FAIL("Couldn't extract string %d from property %s of node %s: %d\n",
|
||||
idx, property, path, len);
|
||||
|
||||
if (strcmp(string, result) != 0)
|
||||
FAIL("String %d in property %s of node %s is %s, expected %s\n",
|
||||
idx, property, path, result, string);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
void *fdt;
|
||||
|
@ -118,5 +146,9 @@ int main(int argc, char *argv[])
|
|||
check_string_index(fdt, "/device", "compatible", "bar", 1);
|
||||
check_string_index(fdt, "/device", "big-endian", "baz", -1);
|
||||
|
||||
check_string(fdt, "/", "compatible", 0, "test-strings");
|
||||
check_string(fdt, "/device", "compatible", 0, "foo");
|
||||
check_string(fdt, "/device", "compatible", 1, "bar");
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue