]> git.armaanb.net Git - slock.git/blobdiff - slock.c
increasing for loops are idiomatic
[slock.git] / slock.c
diff --git a/slock.c b/slock.c
index 97c7489344d9ea78417296f7f0b664391b00501a..08ada6f62c6c61f626ebaafcda311124366ee36d 100644 (file)
--- a/slock.c
+++ b/slock.c
@@ -46,8 +46,6 @@ typedef struct {
 
 static Lock **locks;
 static int nscreens;
-static Bool running = True;
-static Bool failure = False;
 static Bool rr;
 static int rrevbase;
 static int rrerrbase;
@@ -132,14 +130,15 @@ readpw(Display *dpy, const char *pws)
 #endif
 {
        char buf[32], passwd[256], *encrypted;
-       int num, screen;
+       int num, screen, running, failure;
        unsigned int len, color;
        KeySym ksym;
        XEvent ev;
        static int oldc = INIT;
 
        len = 0;
-       running = True;
+       running = 1;
+       failure = 0;
 
        /* As "slock" stands for "Simple X display locker", the DPMS settings
         * had been removed and you can set it with "xset" or some other
@@ -234,6 +233,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);
 }
@@ -248,7 +252,7 @@ lockscreen(Display *dpy, int screen)
        XSetWindowAttributes wa;
        Cursor invisible;
 
-       if (!running || dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock))))
+       if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock))))
                return NULL;
 
        lock->screen = screen;
@@ -270,7 +274,7 @@ lockscreen(Display *dpy, int screen)
        XDefineCursor(dpy, lock->win, invisible);
 
        /* Try to grab mouse pointer *and* keyboard for 600ms, else fail the lock */
-       for (i = 6, ptgrab = kbgrab = -1; i; --i) {
+       for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) {
                if (ptgrab != GrabSuccess) {
                        ptgrab = XGrabPointer(dpy, lock->root, False,
                                 ButtonPressMask | ButtonReleaseMask |
@@ -305,8 +309,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;
 }
 
@@ -359,19 +361,20 @@ 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) {
                cleanup(dpy);
                return 1;
        }
@@ -400,9 +403,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;