diff options
-rw-r--r-- | data.cpp | 5 | ||||
-rw-r--r-- | gui/theme/common/landscape.xml | 6 | ||||
-rw-r--r-- | gui/theme/common/languages/en.xml | 1 | ||||
-rw-r--r-- | gui/theme/common/portrait.xml | 8 | ||||
-rw-r--r-- | gui/theme/common/watch.xml | 6 | ||||
-rw-r--r-- | twinstall.cpp | 66 |
6 files changed, 54 insertions, 38 deletions
@@ -833,20 +833,19 @@ void DataManager::SetDefaultValues() #else mConst.SetValue("tw_has_boot_slots", "0"); #endif + #ifdef TW_NO_LEGACY_PROPS LOGINFO("TW_NO_LEGACY_PROPS := true\n"); - mConst.SetValue("tw_enable_legacy_props", "0"); #endif + #ifdef TW_OEM_BUILD LOGINFO("TW_OEM_BUILD := true\n"); mConst.SetValue("tw_oem_build", "1"); - mConst.SetValue("tw_enable_legacy_props", "0"); #else mConst.SetValue("tw_oem_build", "0"); mPersist.SetValue("tw_app_prompt", "1"); mPersist.SetValue("tw_app_install_system", "1"); mData.SetValue("tw_app_install_status", "0"); // 0 = no status, 1 = not installed, 2 = already installed - mPersist.SetValue("tw_enable_legacy_props", "0"); #endif pthread_mutex_unlock(&m_valuesLock); diff --git a/gui/theme/common/landscape.xml b/gui/theme/common/landscape.xml index 5e640104d..c3d89fe2d 100644 --- a/gui/theme/common/landscape.xml +++ b/gui/theme/common/landscape.xml @@ -447,12 +447,6 @@ <data variable="tw_install_reboot"/> </checkbox> - <checkbox> - <placement x="%col1_x_right%" y="%row13a_y%"/> - <text>{@enable_legacy_props_chk=Enable legacy properties for old zips}</text> - <data variable="tw_enable_legacy_props"/> - </checkbox> - <button style="main_button_half_width"> <placement x="%col1_x_left%" y="%row15a_y%"/> <text>{@zip_add_btn=Add more Zips}</text> diff --git a/gui/theme/common/languages/en.xml b/gui/theme/common/languages/en.xml index 559475c01..8a1be1875 100644 --- a/gui/theme/common/languages/en.xml +++ b/gui/theme/common/languages/en.xml @@ -82,7 +82,6 @@ <string name="folder">Folder:</string> <string name="file">File:</string> <string name="zip_sig_chk">Zip signature verification</string> - <string name="enable_legacy_props_chk">Enable legacy properties for old zips</string> <string name="inject_twrp_chk">Inject TWRP after install</string> <string name="install_reboot_chk">Reboot after installation is complete</string> <string name="options_hdr">Options</string> diff --git a/gui/theme/common/portrait.xml b/gui/theme/common/portrait.xml index c101014ac..f163bea8b 100644 --- a/gui/theme/common/portrait.xml +++ b/gui/theme/common/portrait.xml @@ -393,14 +393,8 @@ </checkbox> <checkbox> - <placement x="%indent%" y="%row15_y%"/> - <text>{@enable_legacy_props_chk=Enable legacy properties for old zips}</text> - <data variable="tw_enable_legacy_props"/> - </checkbox> - - <checkbox> <condition var1="tw_has_injecttwrp" var2="1"/> - <placement x="%indent%" y="%row16a_y%"/> + <placement x="%indent%" y="%row15_y%"/> <text>{@inject_twrp_chk=Inject TWRP after install}</text> <data variable="tw_inject_after_zip"/> </checkbox> diff --git a/gui/theme/common/watch.xml b/gui/theme/common/watch.xml index 2a8234559..d5ef86972 100644 --- a/gui/theme/common/watch.xml +++ b/gui/theme/common/watch.xml @@ -555,12 +555,6 @@ <data variable="tw_install_reboot"/> </checkbox> - <checkbox> - <placement x="%indent%" y="%row5a_y%"/> - <text>{@enable_legacy_props_chk=Enable legacy properties for old zips}</text> - <data variable="tw_enable_legacy_props"/> - </checkbox> - <button> <placement x="%col1_x_left%" y="%row11_y%"/> <highlight color="%highlight_color%"/> diff --git a/twinstall.cpp b/twinstall.cpp index b0b6f3d17..0aaab4534 100644 --- a/twinstall.cpp +++ b/twinstall.cpp @@ -16,10 +16,16 @@ along with TWRP. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <limits.h> +#include <sys/mman.h> #include <sys/stat.h> #include <sys/wait.h> #include <unistd.h> @@ -167,19 +173,51 @@ static int Prepare_Update_Binary(const char *path, ZipWrap *Zip, int* wipe_cache return INSTALL_SUCCESS; } +static bool update_binary_has_legacy_properties(const char *binary) { + const char str_to_match[] = "ANDROID_PROPERTY_WORKSPACE"; + int len_to_match = sizeof(str_to_match) - 1; + bool found = false; + + int fd = open(binary, O_RDONLY); + if (fd < 0) { + LOGINFO("has_legacy_properties: Could not open %s: %s!\n", binary, strerror(errno)); + return false; + } + + struct stat finfo; + if (fstat(fd, &finfo) < 0) { + LOGINFO("has_legacy_properties: Could not fstat %d: %s!\n", fd, strerror(errno)); + close(fd); + return false; + } + + void *data = mmap(NULL, finfo.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + if (data == MAP_FAILED) { + LOGINFO("has_legacy_properties: mmap (size=%lld) failed: %s!\n", finfo.st_size, strerror(errno)); + } else { + if (memmem(data, finfo.st_size, str_to_match, len_to_match)) { + LOGINFO("has_legacy_properties: Found legacy property match!\n"); + found = true; + } + munmap(data, finfo.st_size); + } + close(fd); + + return found; +} + static int Run_Update_Binary(const char *path, ZipWrap *Zip, int* wipe_cache, zip_type ztype) { int ret_val, pipe_fd[2], status, zip_verify; char buffer[1024]; FILE* child_data; #ifndef TW_NO_LEGACY_PROPS - if (DataManager::GetIntValue("tw_enable_legacy_props") != 0) { - /* Set legacy properties */ - if (switch_to_legacy_properties() != 0) { - LOGERR("Legacy property environment did not initialize successfully. Properties may not be detected.\n"); - } else { - LOGINFO("Legacy property environment initialized.\n"); - } + if (!update_binary_has_legacy_properties(TMP_UPDATER_BINARY_PATH)) { + LOGINFO("Legacy property environment not used in updater.\n"); + } else if (switch_to_legacy_properties() != 0) { /* Set legacy properties */ + LOGERR("Legacy property environment did not initialize successfully. Properties may not be detected.\n"); + } else { + LOGINFO("Legacy property environment initialized.\n"); } #endif @@ -260,14 +298,12 @@ static int Run_Update_Binary(const char *path, ZipWrap *Zip, int* wipe_cache, zi int waitrc = TWFunc::Wait_For_Child(pid, &status, "Updater"); #ifndef TW_NO_LEGACY_PROPS - if (DataManager::GetIntValue("tw_enable_legacy_props") != 0) { - /* Unset legacy properties */ - if (legacy_props_path_modified) { - if (switch_to_new_properties() != 0) { - LOGERR("Legacy property environment did not disable successfully. Legacy properties may still be in use.\n"); - } else { - LOGINFO("Legacy property environment disabled.\n"); - } + /* Unset legacy properties */ + if (legacy_props_path_modified) { + if (switch_to_new_properties() != 0) { + LOGERR("Legacy property environment did not disable successfully. Legacy properties may still be in use.\n"); + } else { + LOGINFO("Legacy property environment disabled.\n"); } } #endif |