v2 sent! Thanks for the review On Thu, Nov 1, 2018 at 3:09 AM Karel Zak <kzak@xxxxxxxxxx> wrote: > > On Wed, Oct 31, 2018 at 12:25:48PM -0700, justinpopo6@xxxxxxxxx wrote: > > From: Justin Chen <justinpopo6@xxxxxxxxx> > > > > Some systems do not have the shutdown command. Use poweroff as an > > alternative. > > > > Signed-off-by: Justin Chen <justinpopo6@xxxxxxxxx> > > --- > > include/pathnames.h | 1 + > > sys-utils/rtcwake.c | 38 +++++++++++++++++++++++++++----------- > > 2 files changed, 28 insertions(+), 11 deletions(-) > > > > diff --git a/include/pathnames.h b/include/pathnames.h > > index 3d5052e..ed8ea33 100644 > > --- a/include/pathnames.h > > +++ b/include/pathnames.h > > @@ -53,6 +53,7 @@ > > # define _PATH_LOGIN "/bin/login" > > #endif > > #define _PATH_SHUTDOWN "/sbin/shutdown" > > +#define _PATH_POWEROFF "/sbin/poweroff" > > > > #define _PATH_TERMCOLORS_DIRNAME "terminal-colors.d" > > #define _PATH_TERMCOLORS_DIR "/etc/" _PATH_TERMCOLORS_DIRNAME > > diff --git a/sys-utils/rtcwake.c b/sys-utils/rtcwake.c > > index b63c646..b79adbe 100644 > > --- a/sys-utils/rtcwake.c > > +++ b/sys-utils/rtcwake.c > > @@ -28,6 +28,7 @@ > > #include <stdlib.h> > > #include <string.h> > > #include <sys/ioctl.h> > > +#include <sys/stat.h> > > #include <sys/time.h> > > #include <sys/types.h> > > #include <termios.h> > > @@ -579,20 +580,35 @@ int main(int argc, char **argv) > > break; > > case OFF_MODE: > > { > > + struct stat buf; > > char *arg[5]; > > int i = 0; > > > > - if (ctl.verbose) > > - printf(_("suspend mode: off; executing %s\n"), > > - _PATH_SHUTDOWN); > > - arg[i++] = _PATH_SHUTDOWN; > > - arg[i++] = "-h"; > > - arg[i++] = "-P"; > > - arg[i++] = "now"; > > - arg[i] = NULL; > > - if (!ctl.dryrun) { > > - execv(arg[0], arg); > > - warn(_("failed to execute %s"), _PATH_SHUTDOWN); > > + if (!stat(_PATH_SHUTDOWN, &buf)) { > > + arg[i++] = _PATH_SHUTDOWN; > > + arg[i++] = "-h"; > > + arg[i++] = "-P"; > > + arg[i++] = "now"; > > + arg[i] = NULL; > > + } else if (!stat(_PATH_POWEROFF, &buf)) { > > + arg[i++] = _PATH_POWEROFF; > > + arg[i] = NULL; > > + } else { > > + arg[i] = NULL; > > + } > > + > > + if (arg[0]) { > > + if (ctl.verbose) > > + printf(_("suspend mode: off; executing %s\n"), > > + arg[0]); > > + if (!ctl.dryrun) { > > + execv(arg[0], arg); > > + warn(_("failed to execute %s"), arg[0]); > > + rc = EXIT_FAILURE; > > + } > > + } else { > > + /* Failed to find shutdown command */ > > + warn(_("failed to find shutdown command")); > > rc = EXIT_FAILURE; > > maybe we can also change exit code to: > > rc = EX_EXEC_ENOENT > > to be compatible with another utils. > > Karel > > > } > > break; > > -- > > 2.7.4 > > > > -- > Karel Zak <kzak@xxxxxxxxxx> > http://karelzak.blogspot.com