Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1021edf1 authored by nailyk-fr's avatar nailyk-fr Committed by Dees Troy
Browse files

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
parent dcd1e440
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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)
+11 −0
Original line number Diff line number Diff line
@@ -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");