int mb__system_properties_init() { if (initialized) { list_foreach(contexts, [](context_node* l) { l->reset_access(); }); return 0; } if (is_dir(property_filename)) { if (!initialize_properties()) { return -1; } if (!map_system_property_area(false, nullptr)) { free_and_unmap_contexts(); return -1; } } else { mb__system_property_area__ = map_prop_area(property_filename, true); if (!mb__system_property_area__) { return -1; } list_add(&contexts, "legacy_system_prop_area", mb__system_property_area__); list_add_after_len(&prefixes, "*", contexts); } initialized = true; return 0; }
int mb__system_property_area_init() { free_and_unmap_contexts(); mkdir(property_filename, S_IRWXU | S_IXGRP | S_IXOTH); if (!initialize_properties()) { return -1; } bool open_failed = false; bool fsetxattr_failed = false; list_foreach(contexts, [&fsetxattr_failed, &open_failed](context_node* l) { if (!l->open(true, &fsetxattr_failed)) { open_failed = true; } }); if (open_failed || !map_system_property_area(true, &fsetxattr_failed)) { free_and_unmap_contexts(); return -1; } initialized = true; return fsetxattr_failed ? -2 : 0; }