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 
 |