From 54815c9dc91fcef776641757925d036626a9faef Mon Sep 17 00:00:00 2001 From: atinm Date: Tue, 3 May 2011 00:25:01 -0400 Subject: [PATCH] Use TARGET_RECOVERY_PRE_COMMAND before calling __reboot() recovery For the Power menu, frameworks/base/core/jni/android_os_Power.cpp#L180 already uses TARGET_RECOVERY_PRE_COMMAND if TARGET_RECOVERY_PRE_COMMAND is defined in the BoardConfig.mk for a device to make a system() call before calling __reboot() for recovery. This commit adds the same thing to the other places that we know we are getting into recovery using __reboot(). Change-Id: Ifd0394fed1e87b63d80d95e0e2a049004518e27e --- Android.mk | 2 +- extendedcommands.c | 3 +++ reboot.c | 10 +++++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Android.mk b/Android.mk index 2d7db14..eccce6b 100644 --- a/Android.mk +++ b/Android.mk @@ -31,7 +31,7 @@ LOCAL_CFLAGS += -DRECOVERY_VERSION="$(RECOVERY_VERSION)" RECOVERY_API_VERSION := 2 LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION) -BOARD_RECOVERY_DEFINES := BOARD_HAS_NO_SELECT_BUTTON BOARD_HAS_SMALL_RECOVERY BOARD_LDPI_RECOVERY BOARD_UMS_LUNFILE +BOARD_RECOVERY_DEFINES := BOARD_HAS_NO_SELECT_BUTTON BOARD_HAS_SMALL_RECOVERY BOARD_LDPI_RECOVERY BOARD_UMS_LUNFILE TARGET_RECOVERY_PRE_COMMAND $(foreach board_define,$(BOARD_RECOVERY_DEFINES), \ $(if $($(board_define)), \ diff --git a/extendedcommands.c b/extendedcommands.c index d263405..e5daa5a 100644 --- a/extendedcommands.c +++ b/extendedcommands.c @@ -875,6 +875,9 @@ void show_advanced_menu() switch (chosen_item) { case 0: +#ifdef TARGET_RECOVERY_PRE_COMMAND + __system( TARGET_RECOVERY_PRE_COMMAND ); +#endif __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, "recovery"); break; case 1: diff --git a/reboot.c b/reboot.c index 04aa9ae..6af84da 100644 --- a/reboot.c +++ b/reboot.c @@ -49,9 +49,13 @@ int reboot_main(int argc, char *argv[]) if(force || argc > optind) { if(poweroff) ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_POWER_OFF, NULL); - else if(argc > optind) - ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, argv[optind]); - else + else if(argc > optind) { +#ifdef TARGET_RECOVERY_PRE_COMMAND + if (!strncmp(argv[optind],"recovery",8)) + system( TARGET_RECOVERY_PRE_COMMAND ); +#endif + ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, argv[optind]); + } else ret = reboot(RB_AUTOBOOT); } else { if(poweroff) {