1From 142c2f03d9b2b5264112dddd36c658954cf877b8 Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Mon, 16 Jul 2018 09:53:40 +0800 4Subject: [PATCH] Support rebooting with arg 5 6Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 7--- 8 src/halt.c | 19 +++++++++++++++++-- 9 1 file changed, 17 insertions(+), 2 deletions(-) 10 11diff --git a/src/halt.c b/src/halt.c 12index 499e973..26e6c86 100644 13--- a/src/halt.c 14+++ b/src/halt.c 15@@ -58,6 +58,9 @@ 16 #include <getopt.h> 17 #include "reboot.h" 18 19+#include <linux/reboot.h> 20+#include <sys/syscall.h> 21+ 22 char *Version = "@(#)halt 2.86 31-Jul-2004 miquels@cistron.nl"; 23 char *progname; 24 25@@ -184,6 +187,7 @@ int main(int argc, char **argv) 26 int do_poweroff = 0; 27 int c; 28 char *tm = NULL; 29+ char *extra_arg = NULL; 30 31 /* 32 * Find out who we are 33@@ -232,7 +236,8 @@ int main(int argc, char **argv) 34 usage(); 35 } 36 } 37- if (argc != optind) usage(); 38+ if (argc != optind) 39+ extra_arg = argv[optind]; 40 41 if (geteuid() != 0) { 42 fprintf(stderr, "%s: must be superuser.\n", progname); 43@@ -241,7 +246,7 @@ int main(int argc, char **argv) 44 45 (void)chdir("/"); 46 47- if (!do_hard && !do_nothing) { 48+ if (!do_hard && !do_nothing && !extra_arg) { 49 /* 50 * See if we are in runlevel 0 or 6. 51 */ 52@@ -277,6 +282,16 @@ int main(int argc, char **argv) 53 if (do_nothing) exit(0); 54 55 if (do_reboot) { 56+ if (extra_arg) { 57+ if (!do_sync) 58+ sync(); 59+ printf("rebooting with arg(%s)", extra_arg); 60+ syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, 61+ LINUX_REBOOT_MAGIC2, 62+ LINUX_REBOOT_CMD_RESTART2, extra_arg); 63+ exit(0); 64+ } 65+ 66 init_reboot(BMAGIC_REBOOT); 67 } else { 68 /* 69-- 702.11.0 71 72