[hackers] [PATCH 3/4] Move screen unlocking inside cleanup()

From: Quentin Rameau <quinq_AT_fifth.space>
Date: Thu, 1 Sep 2016 13:47:05 +0200

---
 slock.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/slock.c b/slock.c
index 97c7489..0682279 100644
--- a/slock.c
+++ b/slock.c
_AT_@ -234,6 +234,11 @@ unlockscreen(Display *dpy, Lock *lock)
 static void
 cleanup(Display *dpy)
 {
+	int s;
+
+	for (s = 0; s < nscreens; ++s)
+		unlockscreen(dpy, locks[s]);
+
 	free(locks);
 	XCloseDisplay(dpy);
 }
_AT_@ -305,8 +310,6 @@ lockscreen(Display *dpy, int screen)
 		fprintf(stderr, "slock: unable to grab mouse pointer for screen %d\n", screen);
 	if (kbgrab != GrabSuccess)
 		fprintf(stderr, "slock: unable to grab keyboard for screen %d\n", screen);
-	running = 0;
-	unlockscreen(dpy, lock);
 	return NULL;
 }
 
_AT_@ -359,19 +362,21 @@ main(int argc, char **argv) {
 
 	/* get number of screens in display "dpy" and blank them */
 	nscreens = ScreenCount(dpy);
-	if (!(locks = malloc(sizeof(Lock *) * nscreens))) {
+	if (!(locks = calloc(nscreens, sizeof(Lock *)))) {
 		XCloseDisplay(dpy);
 		die("slock: out of memory\n");
 	}
 	for (nlocks = 0, s = 0; s < nscreens; s++) {
 		if ((locks[s] = lockscreen(dpy, s)) != NULL)
 			nlocks++;
+		else
+			break;
 	}
 	XSync(dpy, 0);
 
-	/* did we actually manage to lock anything? */
-	if (nlocks == 0) {
-		/* nothing to protect */
+	/* did we manage to lock everything? */
+	if (nlocks != nscreens) {
+		running = 0;
 		cleanup(dpy);
 		return 1;
 	}
_AT_@ -400,9 +405,6 @@ main(int argc, char **argv) {
 #endif
 
 	/* password ok, unlock everything and quit */
-	for (s = 0; s < nscreens; s++)
-		unlockscreen(dpy, locks[s]);
-
 	cleanup(dpy);
 
 	return 0;
-- 
2.9.3
Received on Thu Sep 01 2016 - 13:47:05 CEST

This archive was generated by hypermail 2.3.0 : Thu Sep 01 2016 - 13:48:37 CEST