diff options
| author | Tanguy Pruvot <tanguy.pruvot@gmail.com> | 2011-12-01 04:35:39 +0100 |
|---|---|---|
| committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-07-10 22:45:55 +0100 |
| commit | 8df0d9c3578427e4e7fb18f80697670655eb776c (patch) | |
| tree | 438d571498cfcfae54a7a57016e7c53fb2189316 /libcutils | |
| parent | 26e7a088600ea0d540bf4f82f510a2052f3f9b1e (diff) | |
| download | system_core-8df0d9c3578427e4e7fb18f80697670655eb776c.tar.gz system_core-8df0d9c3578427e4e7fb18f80697670655eb776c.tar.bz2 system_core-8df0d9c3578427e4e7fb18f80697670655eb776c.zip | |
RECOVERY_PRE_COMMAND_CLEAR_REASON and extended reboot arguments
fix the 2 new warnings created by our 4-lines recovery patch ;p
Allow also to override toolbox reboot applet, for bootmenu
Change-Id: I975af19a8f295d1e341c7433f96f669db611f89c
Diffstat (limited to 'libcutils')
| -rw-r--r-- | libcutils/Android.mk | 5 | ||||
| -rw-r--r-- | libcutils/android_reboot.c | 32 |
2 files changed, 27 insertions, 10 deletions
diff --git a/libcutils/Android.mk b/libcutils/Android.mk index e98c6a8a..6a2ba663 100644 --- a/libcutils/Android.mk +++ b/libcutils/Android.mk @@ -145,8 +145,11 @@ ifneq ($(TARGET_RECOVERY_PRE_COMMAND),) LOCAL_CFLAGS += -DRECOVERY_PRE_COMMAND='$(TARGET_RECOVERY_PRE_COMMAND)' endif -LOCAL_C_INCLUDES := $(libcutils_c_includes) $(KERNEL_HEADERS) +ifeq ($(TARGET_RECOVERY_PRE_COMMAND_CLEAR_REASON),true) + LOCAL_CFLAGS += -DRECOVERY_PRE_COMMAND_CLEAR_REASON +endif +LOCAL_C_INCLUDES := $(libcutils_c_includes) $(KERNEL_HEADERS) LOCAL_STATIC_LIBRARIES := liblog LOCAL_CFLAGS += $(targetSmpFlag) include $(BUILD_STATIC_LIBRARY) diff --git a/libcutils/android_reboot.c b/libcutils/android_reboot.c index be71d8af..ab29d513 100644 --- a/libcutils/android_reboot.c +++ b/libcutils/android_reboot.c @@ -20,6 +20,7 @@ #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <cutils/android_reboot.h> @@ -103,12 +104,16 @@ static void remount_ro(void) int android_reboot(int cmd, int flags, char *arg) { - int ret; + int ret = 0; + int reason = -1; #ifdef RECOVERY_PRE_COMMAND - if (cmd == ANDROID_RB_RESTART2) { - if (!strncmp((char *)arg,"recovery",8)) - system( RECOVERY_PRE_COMMAND ); + if (cmd == (int) ANDROID_RB_RESTART2) { + if (arg && strlen(arg) > 0) { + char cmd[PATH_MAX]; + sprintf(cmd, RECOVERY_PRE_COMMAND " %s", arg); + system(cmd); + } } #endif @@ -120,22 +125,31 @@ int android_reboot(int cmd, int flags, char *arg) switch (cmd) { case ANDROID_RB_RESTART: - ret = reboot(RB_AUTOBOOT); + reason = RB_AUTOBOOT; break; case ANDROID_RB_POWEROFF: ret = reboot(RB_POWER_OFF); - break; + return ret; case ANDROID_RB_RESTART2: - ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, - LINUX_REBOOT_CMD_RESTART2, arg); + // REBOOT_MAGIC break; default: - ret = -1; + return -1; } +#ifdef RECOVERY_PRE_COMMAND_CLEAR_REASON + reason = RB_AUTOBOOT; +#endif + + if (reason != -1) + ret = reboot(reason); + else + ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, + LINUX_REBOOT_CMD_RESTART2, arg); + return ret; } |
