From 1021edf17ed57f193724a953dd159e7717e9553a Mon Sep 17 00:00:00 2001 From: nailyk-fr Date: Sun, 18 Dec 2016 14:32:25 +0100 Subject: bootloader_message: Allow TWRP to ignore wipe-data command into misc * Rebase of https://gerrit.omnirom.org/#/c/20750/ patch-set 3 * Original commit message: fix: recently a change in AOSP causes a bootloop to TWRP (and therefore all ROM's based on it) Reason: AOSP enables use of /misc partition and normally the fstab in TWRP will not have /misc added. The problem is now when Android writes a wipe command to /misc it will force TWRP to boot but TWRP will do nothing - leaving the cmd in /misc. This results in a bootloop to TWRP. Solution: I added a new var TW_IGNORE_MISC_WIPE_DATA which can be set to "true" in Boardconfig.mk of a device requiring this which then ignores /misc commands like it would be when /misc would be just not in fstab BUT with this change TWRP clears the bit in /misc so a normal boot can happen. Besides that if the device do not have an own recovery key combo and /misc is enabled we want to open TWRP after walking through the factory reset screen - without actually doing a factory reset. kudos to nailyk (and DevUt) for the help with the C++ code! Change-Id: If6fed5872015f1a66304e3edbdb787c507236f69 --- bootloader_message/Android.mk | 4 ++++ bootloader_message/bootloader_message.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/bootloader_message/Android.mk b/bootloader_message/Android.mk index 8653fd525..1d5c85fe3 100644 --- a/bootloader_message/Android.mk +++ b/bootloader_message/Android.mk @@ -37,5 +37,9 @@ else LOCAL_SHARED_LIBRARIES += libc++ endif LOCAL_CFLAGS := -DEXCLUDE_FS_MGR +# ignore bootloader's factory reset command even when written to /misc +ifeq ($(TW_IGNORE_MISC_WIPE_DATA), true) + LOCAL_CFLAGS += -DIGNORE_MISC_WIPE_DATA +endif LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include include $(BUILD_SHARED_LIBRARY) diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index eb99bdb42..362d9cbe2 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -284,6 +284,17 @@ get_args(int *argc, char ***argv) { (*argv)[0] = strdup(arg); for (*argc = 1; *argc < MAX_ARGS; ++*argc) { if ((arg = strtok(NULL, "\n")) == NULL) break; + +// if the device does not have an own recovery key combo we just want to open TWRP after +// walking through the factory reset screen - without actually doing a factory reset +#ifdef IGNORE_MISC_WIPE_DATA + if (!strcmp(arg, "--wipe_data")) { + (*argv)[*argc] = ""; + *argc = *argc -1; + printf("Bootloader arg \"%s\" ignored because TWRP was compiled with TW_IGNORE_MISC_WIPE_DATA\n", arg); + continue; + } +#endif (*argv)[*argc] = strdup(arg); } printf("Got arguments from boot message\n"); -- cgit v1.2.3