applied andres' multi-slock fix, thanks for spotting this issue
authorgarbeam@gmail.com <unknown>
Thu, 2 Aug 2012 19:54:18 +0000 (21:54 +0200)
committergarbeam@gmail.com <unknown>
Thu, 2 Aug 2012 19:54:18 +0000 (21:54 +0200)
slock.c

diff --git a/slock.c b/slock.c
index 320ed2b..154a091 100644 (file)
--- a/slock.c
+++ b/slock.c
@@ -1,3 +1,4 @@
+
 /* See LICENSE file for license details. */
 #define _XOPEN_SOURCE 500
 #if HAVE_SHADOW_H
@@ -211,9 +212,9 @@ lockscreen(Display *dpy, int screen) {
                                break;
                        usleep(1000);
                }
-               running = (len > 0);
        }
 
+       running &= (len > 0);
        if(!running) {
                unlockscreen(dpy, lock);
                lock = NULL;
@@ -257,10 +258,20 @@ main(int argc, char **argv) {
        locks = malloc(sizeof(Lock *) * nscreens);
        if(locks == NULL)
                die("slock: malloc: %s", strerror(errno));
-       for(screen = 0; screen < nscreens; screen++)
-               locks[screen] = lockscreen(dpy, screen);
+       int nlocks = 0;
+       for(screen = 0; screen < nscreens; screen++) {
+               if ( (locks[screen] = lockscreen(dpy, screen)) != NULL)
+                       nlocks++;
+       }
        XSync(dpy, False);
 
+       /* Did we actually manage to lock something? */
+       if (nlocks == 0) { // nothing to protect
+               free(locks);
+               XCloseDisplay(dpy);
+               return 1;
+       }
+
        /* Everything is now blank. Now wait for the correct password. */
 #ifdef HAVE_BSD_AUTH
        readpw(dpy);