bionic: add __system_property_foreach
find_nth() will be inefficient on a trie. Since find_nth() is only used internally and only for enumerating properties, we can add a foreach() function to do this directly. Change-Id: I66bde9926c193073d74b244cce9fffd52108fff8 Signed-off-by: Greg Hackmann <ghackmann@google.com>
This commit is contained in:
parent
1791cb0001
commit
577418403d
|
@ -159,6 +159,22 @@ cleanup:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __system_property_foreach(
|
||||||
|
void (*propfn)(const prop_info *pi, void *cookie),
|
||||||
|
void *cookie)
|
||||||
|
{
|
||||||
|
prop_area *pa = __system_property_area__;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = 0; i < pa->count; i++) {
|
||||||
|
unsigned entry = pa->toc[i];
|
||||||
|
prop_info *pi = TOC_TO_INFO(pa, entry);
|
||||||
|
propfn(pi, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const prop_info *__system_property_find_nth(unsigned n)
|
const prop_info *__system_property_find_nth(unsigned n)
|
||||||
{
|
{
|
||||||
prop_area *pa = __system_property_area__;
|
prop_area *pa = __system_property_area__;
|
||||||
|
|
|
@ -76,13 +76,26 @@ int __system_property_read(const prop_info *pi, char *name, char *value);
|
||||||
** there is no nth property. Use __system_property_read() to
|
** there is no nth property. Use __system_property_read() to
|
||||||
** read the value of this property.
|
** read the value of this property.
|
||||||
**
|
**
|
||||||
** This method is for inspecting and debugging the property
|
** Please do not call this method. It only exists to provide
|
||||||
|
** backwards compatibility to NDK apps. Its implementation
|
||||||
|
** is inefficient and order of results may change from call
|
||||||
|
** to call.
|
||||||
|
*/
|
||||||
|
const prop_info *__system_property_find_nth(unsigned n);
|
||||||
|
|
||||||
|
/* Pass a prop_info for each system property to the provided
|
||||||
|
** callback. Use __system_property_read() to read the value
|
||||||
|
** of this property.
|
||||||
|
**
|
||||||
|
** This method is for inspecting and debugging the property
|
||||||
** system. Please use __system_property_find() instead.
|
** system. Please use __system_property_find() instead.
|
||||||
**
|
**
|
||||||
** Order of results may change from call to call. This is
|
** Order of results may change from call to call. This is
|
||||||
** not a bug.
|
** not a bug.
|
||||||
*/
|
*/
|
||||||
const prop_info *__system_property_find_nth(unsigned n);
|
int __system_property_foreach(
|
||||||
|
void (*propfn)(const prop_info *pi, void *cookie),
|
||||||
|
void *cookie);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,25 @@ TEST(properties, fill_247) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void foreach_test_callback(const prop_info *pi, void* cookie) {
|
||||||
|
size_t *count = static_cast<size_t *>(cookie);
|
||||||
|
|
||||||
|
ASSERT_NE((prop_info *)NULL, pi);
|
||||||
|
(*count)++;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(properties, foreach) {
|
||||||
|
LocalPropertyTestState pa;
|
||||||
|
size_t count = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(0, __system_property_add("property", 8, "value1", 6));
|
||||||
|
ASSERT_EQ(0, __system_property_add("other_property", 14, "value2", 6));
|
||||||
|
ASSERT_EQ(0, __system_property_add("property_other", 14, "value3", 6));
|
||||||
|
|
||||||
|
ASSERT_EQ(0, __system_property_foreach(foreach_test_callback, &count));
|
||||||
|
ASSERT_EQ(3U, count);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(properties, find_nth) {
|
TEST(properties, find_nth) {
|
||||||
LocalPropertyTestState pa;
|
LocalPropertyTestState pa;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue