1Search $PATH for the shutdown binary instead of hard-coding /sbin/shutdown,
2which isn't valid on NixOS (and a compatibility link on most other modern
3distros anyway).
4
5--- a/include/pathnames.h
6+++ b/include/pathnames.h
7@@ -50,8 +50,8 @@
8 #ifndef _PATH_LOGIN
9 # define _PATH_LOGIN "/bin/login"
10 #endif
11-#define _PATH_SHUTDOWN "/sbin/shutdown"
12-#define _PATH_POWEROFF "/sbin/poweroff"
13+#define _PATH_SHUTDOWN "shutdown"
14+#define _PATH_POWEROFF "poweroff"
15
16 #define _PATH_TERMCOLORS_DIRNAME "terminal-colors.d"
17 #define _PATH_TERMCOLORS_DIR "/etc/" _PATH_TERMCOLORS_DIRNAME
18--- a/sys-utils/rtcwake.c
19+++ b/sys-utils/rtcwake.c
20@@ -587,29 +587,29 @@ int main(int argc, char **argv)
21 char *arg[5];
22 int i = 0;
23
24- if (!access(_PATH_SHUTDOWN, X_OK)) {
25- arg[i++] = _PATH_SHUTDOWN;
26- arg[i++] = "-h";
27- arg[i++] = "-P";
28- arg[i++] = "now";
29- arg[i] = NULL;
30- } else if (!access(_PATH_POWEROFF, X_OK)) {
31- arg[i++] = _PATH_POWEROFF;
32- arg[i] = NULL;
33- } else {
34- arg[i] = NULL;
35- }
36+ arg[i++] = _PATH_SHUTDOWN;
37+ arg[i++] = "-h";
38+ arg[i++] = "-P";
39+ arg[i++] = "now";
40+ arg[i] = NULL;
41
42- if (arg[0]) {
43- if (ctl.verbose)
44- printf(_("suspend mode: off; executing %s\n"),
45- arg[0]);
46- if (!ctl.dryrun) {
47- execv(arg[0], arg);
48+ if (ctl.verbose)
49+ printf(_("suspend mode: off; executing %s\n"),
50+ arg[0]);
51+
52+ if (!ctl.dryrun) {
53+ execvp(arg[0], arg);
54+ if (ctl.verbose) {
55 warn(_("failed to execute %s"), arg[0]);
56- rc = EX_EXEC_ENOENT;
57+ // Reuse translations.
58+ printf(_("suspend mode: off; executing %s\n"),
59+ _PATH_POWEROFF);
60 }
61- } else {
62+
63+ i = 0;
64+ arg[i++] = _PATH_POWEROFF;
65+ arg[i] = NULL;
66+ execvp(arg[0], arg);
67 /* Failed to find shutdown command */
68 warn(_("failed to find shutdown command"));
69 rc = EX_EXEC_ENOENT;