int property_list( void (*propfn)(const char *key, const char *value, void *cookie), void *cookie) { struct property_list_callback_data data = { propfn, cookie }; return __system_property_foreach(property_list_callback, &data); }
TEST(properties, fill_hierarchical) { #if defined(__BIONIC__) LocalPropertyTestState pa; ASSERT_TRUE(pa.valid); char prop_name[PROP_NAME_MAX]; char prop_value[PROP_VALUE_MAX]; char prop_value_ret[PROP_VALUE_MAX]; int ret; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { ret = snprintf(prop_name, PROP_NAME_MAX - 1, "property_%d.%d.%d", i, j, k); memset(prop_name + ret, 'a', PROP_NAME_MAX - 1 - ret); ret = snprintf(prop_value, PROP_VALUE_MAX - 1, "value_%d.%d.%d", i, j, k); memset(prop_value + ret, 'b', PROP_VALUE_MAX - 1 - ret); prop_name[PROP_NAME_MAX - 1] = 0; prop_value[PROP_VALUE_MAX - 1] = 0; ASSERT_EQ(0, __system_property_add(prop_name, PROP_NAME_MAX - 1, prop_value, PROP_VALUE_MAX - 1)); } } } for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { ret = snprintf(prop_name, PROP_NAME_MAX - 1, "property_%d.%d.%d", i, j, k); memset(prop_name + ret, 'a', PROP_NAME_MAX - 1 - ret); ret = snprintf(prop_value, PROP_VALUE_MAX - 1, "value_%d.%d.%d", i, j, k); memset(prop_value + ret, 'b', PROP_VALUE_MAX - 1 - ret); prop_name[PROP_NAME_MAX - 1] = 0; prop_value[PROP_VALUE_MAX - 1] = 0; memset(prop_value_ret, '\0', PROP_VALUE_MAX); ASSERT_EQ(PROP_VALUE_MAX - 1, __system_property_get(prop_name, prop_value_ret)); ASSERT_EQ(0, memcmp(prop_value, prop_value_ret, PROP_VALUE_MAX)); } } } bool ok[8][8][8]; memset(ok, 0, sizeof(ok)); __system_property_foreach(hierarchical_test_callback, ok); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { ASSERT_TRUE(ok[i][j][k]); } } } #else // __BIONIC__ GTEST_LOG_(INFO) << "This test does nothing.\n"; #endif // __BIONIC__ }
const prop_info *__system_property_find_nth(unsigned n) { find_nth_cookie cookie(n); const int err = __system_property_foreach(find_nth_fn, &cookie); if (err < 0) { return NULL; } return cookie.pi; }
TEST(properties, foreach) { #if defined(__BIONIC__) LocalPropertyTestState pa; ASSERT_TRUE(pa.valid); 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); #else // __BIONIC__ GTEST_LOG_(INFO) << "This test does nothing.\n"; #endif // __BIONIC__ }
int property_list(void (*fn)(const char* name, const char* value, void* cookie), void* cookie) { callback_data data = { fn, cookie }; return __system_property_foreach(property_list_callback, &data); }
void property_show(void) { //klog_write(4, "<4> property_show start!\n"); __system_property_foreach(print_sys_prop, NULL); //klog_write(4, "<4> property_show done!\n"); }