diff options
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | slock.c | 22 |
2 files changed, 13 insertions, 11 deletions
@@ -1,5 +1,5 @@ # slock version -VERSION = 1.5 +VERSION = 1.6 # Customize below to fit your system @@ -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)); } } |
