diff --git a/libinit/include/libinit_utils.h b/libinit/include/libinit_utils.h index ac2d673..dc023d3 100644 --- a/libinit/include/libinit_utils.h +++ b/libinit/include/libinit_utils.h @@ -13,4 +13,6 @@ void property_override(std::string prop, std::string value, bool add = true); void set_ro_build_prop(const std::string &prop, const std::string &value, bool product = false); +std::string fingerprint_to_description(std::string fingerprint); + #endif // LIBINIT_UTILS_H diff --git a/libinit/include/libinit_variant.h b/libinit/include/libinit_variant.h index 1607c4a..905ab19 100644 --- a/libinit/include/libinit_variant.h +++ b/libinit/include/libinit_variant.h @@ -16,7 +16,6 @@ typedef struct variant_info { std::string brand; std::string device; std::string model; - std::string build_description; std::string build_fingerprint; bool nfc; diff --git a/libinit/libinit_utils.cpp b/libinit/libinit_utils.cpp index b2e3aad..6bc711a 100644 --- a/libinit/libinit_utils.cpp +++ b/libinit/libinit_utils.cpp @@ -40,3 +40,34 @@ void set_ro_build_prop(const std::string &prop, const std::string &value, bool p property_override(prop_name, value, true); } } + +#define FIND_AND_REMOVE(s, delimiter, variable_name) \ + std::string variable_name = s.substr(0, s.find(delimiter)); \ + s.erase(0, s.find(delimiter) + delimiter.length()); + +#define APPEND_STRING(s, to_append) \ + s.append(" "); \ + s.append(to_append); + +std::string fingerprint_to_description(std::string fingerprint) { + std::string delimiter = "/"; + std::string delimiter2 = ":"; + std::string build_fingerprint_copy = fingerprint; + + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, brand) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, product) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter2, device) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, platform_version) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, build_id) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter2, build_number) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, build_variant) + std::string build_version_tags = build_fingerprint_copy; + + std::string description = product + "-" + build_variant; + APPEND_STRING(description, platform_version) + APPEND_STRING(description, build_id) + APPEND_STRING(description, build_number) + APPEND_STRING(description, build_version_tags) + + return description; +} diff --git a/libinit/libinit_variant.cpp b/libinit/libinit_variant.cpp index 456edc5..20afd43 100644 --- a/libinit/libinit_variant.cpp +++ b/libinit/libinit_variant.cpp @@ -34,7 +34,8 @@ void set_variant_props(const variant_info_t variant) { set_ro_build_prop("fingerprint", variant.build_fingerprint); property_override("ro.bootimage.build.fingerprint", variant.build_fingerprint); - property_override("ro.build.description", variant.build_description); + + property_override("ro.build.description", fingerprint_to_description(variant.build_fingerprint)); if (variant.nfc) property_override(SKU_PROP, "nfc");