summary refs log blame commit diff
path: root/pkgs/os-specific/linux/util-linux/rtcwake-search-PATH-for-shutdown.patch
blob: 52c970a18f3daf5d03e52be016595eb1dd3bdbfa (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                                           

                         
                 
                    
                                            
       
                                                



                                                

                                                                

                         













































                                                                              
                                            


                                                                   
Search $PATH for the shutdown binary instead of hard-coding /sbin/shutdown,
which isn't valid on NixOS (and a compatibility link on most other modern
distros anyway).

--- a/include/pathnames.h
+++ b/include/pathnames.h
@@ -50,8 +50,8 @@
 #ifndef _PATH_LOGIN
 # define _PATH_LOGIN		"/bin/login"
 #endif
-#define _PATH_SHUTDOWN		"/sbin/shutdown"
-#define _PATH_POWEROFF		"/sbin/poweroff"
+#define _PATH_SHUTDOWN		"shutdown"
+#define _PATH_POWEROFF		"poweroff"
 
 #define _PATH_TERMCOLORS_DIRNAME "terminal-colors.d"
 #define _PATH_TERMCOLORS_DIR	"/etc/" _PATH_TERMCOLORS_DIRNAME
--- a/sys-utils/rtcwake.c
+++ b/sys-utils/rtcwake.c
@@ -587,29 +587,29 @@ int main(int argc, char **argv)
 		char *arg[5];
 		int i = 0;
 
-		if (!access(_PATH_SHUTDOWN, X_OK)) {
-			arg[i++] = _PATH_SHUTDOWN;
-			arg[i++] = "-h";
-			arg[i++] = "-P";
-			arg[i++] = "now";
-			arg[i]   = NULL;
-		} else if (!access(_PATH_POWEROFF, X_OK)) {
-			arg[i++] = _PATH_POWEROFF;
-			arg[i]   = NULL;
-		} else {
-			arg[i] 	 = NULL;
-		}
+		arg[i++] = _PATH_SHUTDOWN;
+		arg[i++] = "-h";
+		arg[i++] = "-P";
+		arg[i++] = "now";
+		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);
+		if (ctl.verbose)
+			printf(_("suspend mode: off; executing %s\n"),
+					arg[0]);
+
+		if (!ctl.dryrun) {
+			execvp(arg[0], arg);
+			if (ctl.verbose) {
 				warn(_("failed to execute %s"), arg[0]);
-				rc = EX_EXEC_ENOENT;
+				// Reuse translations.
+				printf(_("suspend mode: off; executing %s\n"),
+						_PATH_POWEROFF);
 			}
-		} else {
+
+			i = 0;
+			arg[i++] = _PATH_POWEROFF;
+			arg[i]   = NULL;
+			execvp(arg[0], arg);
 			/* Failed to find shutdown command */
 			warn(_("failed to find shutdown command"));
 			rc = EX_EXEC_ENOENT;