As proposed on misc@, here's a diff to bring our shutdown(8) in line
with FreeBSD's and use plain "-p" to specify "halt and power down".
Mostly from FreeBSD.

Index: shutdown.8
===================================================================
RCS file: /cvs/src/sbin/shutdown/shutdown.8,v
retrieving revision 1.39
diff -u -p -r1.39 shutdown.8
--- shutdown.8  19 Nov 2007 08:51:49 -0000      1.39
+++ shutdown.8  20 Jan 2015 20:57:36 -0000
@@ -58,7 +58,8 @@ The options are as follows:
 .Bl -tag -width Ds
 .It Fl d
 When used with
-.Fl h
+.Fl h ,
+.Fl p ,
 or
 .Fl r
 causes system to perform a dump.
@@ -93,18 +94,15 @@ does not actually halt the system, but l
 system multi-user with logins disabled (for all but superuser).
 .It Fl n
 When used with
-.Fl h
+.Fl h ,
+.Fl p ,
 or
 .Fl r
 prevents the normal
 .Xr sync 2
 before stopping the system.
 .It Fl p
-The
-.Fl p
-flag is passed on to
-.Xr halt 8 ,
-causing machines which support automatic power down to do so after halting.
+The system will turn the power off after shutdown if it can.
 .It Fl r
 .Nm
 execs
Index: shutdown.c
===================================================================
RCS file: /cvs/src/sbin/shutdown/shutdown.c,v
retrieving revision 1.38
diff -u -p -r1.38 shutdown.c
--- shutdown.c  16 Jan 2015 06:40:01 -0000      1.38
+++ shutdown.c  20 Jan 2015 20:51:26 -0000
@@ -153,14 +153,9 @@ main(int argc, char *argv[])
                    "shutdown: incompatible switches -f and -n.\n");
                usage();
        }
-       if (doreboot && dohalt) {
+       if (doreboot + dohalt + dopower > 1) {
                (void)fprintf(stderr,
-                   "shutdown: incompatible switches -h and -r.\n");
-               usage();
-       }
-       if (dopower && !dohalt) {
-               (void)fprintf(stderr,
-                   "shutdown: switch -p must be used with -h.\n");
+                   "shutdown: incompatible switches -h, -p and -r.\n");
                usage();
        }
        getoffset(*argv++);
@@ -333,7 +328,8 @@ die_you_gravy_sucking_pig_dog(void)
 {
 
        syslog(LOG_NOTICE, "%s by %s: %s",
-           doreboot ? "reboot" : dohalt ? "halt" : "shutdown", whom, mbuf);
+           doreboot ? "reboot" : dohalt ? "halt" : dopower ? "power-down" :
+           "shutdown", whom, mbuf);
        (void)sleep(2);
 
        (void)printf("\r\nSystem shutdown time has arrived\007\007\r\n");
@@ -348,6 +344,8 @@ die_you_gravy_sucking_pig_dog(void)
                (void)printf("reboot");
        else if (dohalt)
                (void)printf("halt");
+       else if (dopower)
+               (void)printf("power-down");
        if (nosync)
                (void)printf(" no sync");
        if (dofast)
@@ -363,7 +361,7 @@ die_you_gravy_sucking_pig_dog(void)
                syslog(LOG_ERR, "shutdown: can't exec %s: %m.", _PATH_REBOOT);
                warn(_PATH_REBOOT);
        }
-       else if (dohalt) {
+       else if (dohalt || dopower) {
                execle(_PATH_HALT, "halt", "-l",
                    (dopower ? "-p" : (nosync ? "-n" : (dodump ? "-d" : NULL))),
                    (nosync ? "-n" : (dodump ? "-d" : NULL)),
@@ -546,6 +544,7 @@ badtime(void)
 void
 usage(void)
 {
-       fprintf(stderr, "usage: shutdown [-] [-dfhknpr] time [warning-message 
...]\n");
+       fprintf(stderr,
+           "usage: shutdown [-] [-dfhknpr] time [warning-message ...]\n");
        exit(1);
 }
-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to