aboutsummaryrefslogtreecommitdiffstats
path: root/libcutils
diff options
context:
space:
mode:
authorTanguy Pruvot <tanguy.pruvot@gmail.com>2011-12-01 04:35:39 +0100
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2012-07-10 22:45:55 +0100
commit8df0d9c3578427e4e7fb18f80697670655eb776c (patch)
tree438d571498cfcfae54a7a57016e7c53fb2189316 /libcutils
parent26e7a088600ea0d540bf4f82f510a2052f3f9b1e (diff)
downloadsystem_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.mk5
-rw-r--r--libcutils/android_reboot.c32
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;
}