diff --git a/interfaces/kits/include/misc_info/misc_info.h b/interfaces/kits/include/misc_info/misc_info.h index 447469468cd946a02268206f2f64fc43be52536e..d82e2e8c030708290a6417bf193f426e7ed11761 100755 --- a/interfaces/kits/include/misc_info/misc_info.h +++ b/interfaces/kits/include/misc_info/misc_info.h @@ -29,7 +29,7 @@ constexpr int MAX_FAULTINFO_SIZE = 32; constexpr int MAX_RESERVED_SIZE = 224; constexpr int MAX_PARA_SIZE = 32; -constexpr int MAX_RESERVED_SIZE_PARA = 224; +constexpr int MAX_RESERVED_SIZE_PARA = 192; // misc partition offset definition. max size of misc is 2MB, do not overflow. constexpr off_t MISC_BASE_OFFSET = 0; @@ -57,6 +57,7 @@ struct UpdateMessage { struct UpdaterPara { char language[MAX_PARA_SIZE]; + char osVersionSuffix[MAX_PARA_SIZE]; char reserved[MAX_RESERVED_SIZE_PARA]; }; diff --git a/services/etc/updater_normal.cfg b/services/etc/updater_normal.cfg index 725df547ee54ca644f52cfce7e7a273e9888aec9..eee85f16b2d9ddaa860d0d50dbd09a8432841700 100644 --- a/services/etc/updater_normal.cfg +++ b/services/etc/updater_normal.cfg @@ -6,8 +6,8 @@ "rm /data/updater/rollback" ] }, { - "name" : "param:persist.global.locale=*", - "condition" : "persist.global.locale=*", + "name" : "param:persist.global.locale=* || const.settings.os_version_suffix=*", + "condition" : "persist.global.locale=* || const.settings.os_version_suffix=*", "cmds" : [ "start write_updater" ] diff --git a/utils/write_updater.cpp b/utils/write_updater.cpp index 86c90264e929a98c853229a03b97e6cbfbf63d50..1e57f046decd022ee0e1e034fdbb4fae972e772a 100644 --- a/utils/write_updater.cpp +++ b/utils/write_updater.cpp @@ -61,6 +61,46 @@ static int ExceptionBin(int argc, char **argv, UpdateMessage &boot) return 0; } +static int WriteUpdaterLanguage(UpdaterPara ¶) +{ + char language[MAX_PARA_SIZE + 1] {}; + int res = GetParameter("persist.global.locale", "", language, MAX_PARA_SIZE); + if (res <= 0) { + cout << "Get persist.global.locale parameter failed" << endl; + res = GetParameter("const.global.locale", "", language, MAX_PARA_SIZE); + if (res <= 0) { + cout << "Get const.global.locale parameter failed" << endl; + return -1; + } + } + (void)memset_s(para.language, MAX_PARA_SIZE, 0, MAX_PARA_SIZE); + res = memcpy_s(para.language, MAX_PARA_SIZE, language, sizeof(language) - 1); + para.language[MAX_PARA_SIZE - 1] = '\0'; + if (res != 0) { + cout << "memcpy_s para.language failed" << endl; + return -1; + } + return 0; +} + +static int WriteUpdaterVersionSuffix(UpdaterPara ¶) +{ + char osVersionSuffix[MAX_PARA_SIZE + 1] {}; + int res = GetParameter("const.settings.os_version_suffix", "", osVersionSuffix, MAX_PARA_SIZE); + if (res < 0) { + cout << "Get const.settings.os_version_suffix parameter failed" << endl; + return -1; + } + (void)memset_s(para.osVersionSuffix, MAX_PARA_SIZE, 0, MAX_PARA_SIZE); + res = memcpy_s(para.osVersionSuffix, MAX_PARA_SIZE, osVersionSuffix, sizeof(osVersionSuffix) - 1); + para.osVersionSuffix[MAX_PARA_SIZE - 1] = '\0'; + if (res != 0) { + cout << "memcpy_s para.osVersionSuffix failed" << endl; + return -1; + } + return 0; +} + static int ExceptionUpdater(int argc, char **argv, UpdateMessage &boot) { if (argc < BINARY_MAX_ARGS) { @@ -83,19 +123,20 @@ static int WriteUpdaterPara(int argc, UpdaterPara ¶) cout << "please input correct updater command!" << endl; return -1; } - int res = GetParameter("persist.global.locale", "", para.language, MAX_PARA_SIZE); - if (res <= 0) { - cout << "Get persist.global.locale parameter failed" << endl; - res = GetParameter("const.global.locale", "", para.language, MAX_PARA_SIZE); - if (res <= 0) { - cout << "Get const.global.locale parameter failed" << endl; - return -1; - } + if (!ReadUpdaterParaMisc(para)) { + cout << "ReadUpdaterParaMisc failed" << endl; + return -1; } + int resLanguage = WriteUpdaterLanguage(para); + int resVersionSuffix = WriteUpdaterVersionSuffix(para); if (!WriteUpdaterParaMisc(para)) { cout << "WriteUpdaterParaMisc failed!" << endl; return -1; } + if (resLanguage != 0 || resVersionSuffix != 0) { + cout << "WriteUpdaterLanguage or WriteUpdaterVersionSuffix fail" << endl; + return -1; + } return 0; }