|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
|
|
|
|
|
|
/* See LICENSE file for license details. */ |
|
|
|
/* See LICENSE file for license details. */ |
|
|
|
#define _XOPEN_SOURCE 500 |
|
|
|
#define _XOPEN_SOURCE 500 |
|
|
|
#if HAVE_SHADOW_H |
|
|
|
#if HAVE_SHADOW_H |
|
|
@ -211,9 +212,9 @@ lockscreen(Display *dpy, int screen) { |
|
|
|
break; |
|
|
|
break; |
|
|
|
usleep(1000); |
|
|
|
usleep(1000); |
|
|
|
} |
|
|
|
} |
|
|
|
running = (len > 0); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
running &= (len > 0); |
|
|
|
if(!running) { |
|
|
|
if(!running) { |
|
|
|
unlockscreen(dpy, lock); |
|
|
|
unlockscreen(dpy, lock); |
|
|
|
lock = NULL; |
|
|
|
lock = NULL; |
|
|
@ -257,10 +258,20 @@ main(int argc, char **argv) { |
|
|
|
locks = malloc(sizeof(Lock *) * nscreens); |
|
|
|
locks = malloc(sizeof(Lock *) * nscreens); |
|
|
|
if(locks == NULL) |
|
|
|
if(locks == NULL) |
|
|
|
die("slock: malloc: %s", strerror(errno)); |
|
|
|
die("slock: malloc: %s", strerror(errno)); |
|
|
|
for(screen = 0; screen < nscreens; screen++) |
|
|
|
int nlocks = 0; |
|
|
|
locks[screen] = lockscreen(dpy, screen); |
|
|
|
for(screen = 0; screen < nscreens; screen++) { |
|
|
|
|
|
|
|
if ( (locks[screen] = lockscreen(dpy, screen)) != NULL) |
|
|
|
|
|
|
|
nlocks++; |
|
|
|
|
|
|
|
} |
|
|
|
XSync(dpy, False); |
|
|
|
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. */ |
|
|
|
/* Everything is now blank. Now wait for the correct password. */ |
|
|
|
#ifdef HAVE_BSD_AUTH |
|
|
|
#ifdef HAVE_BSD_AUTH |
|
|
|
readpw(dpy); |
|
|
|
readpw(dpy); |
|
|
|