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