aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.mk2
-rw-r--r--slock.c22
2 files changed, 13 insertions, 11 deletions
diff --git a/config.mk b/config.mk
index 514c236..dcd27d0 100644
--- a/config.mk
+++ b/config.mk
@@ -1,5 +1,5 @@
# slock version
-VERSION = 1.5
+VERSION = 1.6
# Customize below to fit your system
diff --git a/slock.c b/slock.c
index edd4440..cfa499c 100644
--- a/slock.c
+++ b/slock.c
@@ -14,6 +14,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <spawn.h>
#include <sys/types.h>
#include <X11/extensions/Xrandr.h>
#include <X11/keysym.h>
@@ -185,6 +186,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
(len + num < sizeof(passwd))) {
memcpy(passwd + len, buf, num);
len += num;
+ } else if (buf[0] == '\025') { /* ctrl-u clears input */
+ explicit_bzero(&passwd, sizeof(passwd));
+ len = 0;
}
break;
}
@@ -405,7 +409,8 @@ main(int argc, char **argv) {
case -1:
die("slock: fork failed: %s\n", strerror(errno));
case 0:
- freopen("/dev/null", "w", stdout);
+ if (!freopen("/dev/null", "w", stdout))
+ die("slock: freopen: %s\n", strerror(errno));
break;
default:
if (opt_pid)
@@ -416,15 +421,12 @@ main(int argc, char **argv) {
/* run post-lock command */
if (argc > 0) {
- switch (fork()) {
- case -1:
- die("slock: fork failed: %s\n", strerror(errno));
- case 0:
- if (close(ConnectionNumber(dpy)) < 0)
- die("slock: close: %s\n", strerror(errno));
- execvp(argv[0], argv);
- fprintf(stderr, "slock: execvp %s: %s\n", argv[0], strerror(errno));
- _exit(1);
+ pid_t pid;
+ extern char **environ;
+ int err = posix_spawnp(&pid, argv[0], NULL, NULL, argv, environ);
+ if (err) {
+ die("slock: failed to execute post-lock command: %s: %s\n",
+ argv[0], strerror(err));
}
}