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