diff options
| author | Quentin Rameau <quinq@fifth.space> | 2016-09-01 13:47:05 +0200 | 
|---|---|---|
| committer | Markus Teich <markus.teich@stusta.mhn.de> | 2016-09-02 10:50:32 +0200 | 
| commit | 39fb855aa100c5a5a8b7f3b6cc1fbb2135fe7dde (patch) | |
| tree | f11ce8e866a351346c2c11487e7cffc62c3421b7 | |
| parent | e378f735d857f7da124177e3540912d920be5022 (diff) | |
| download | slock-39fb855aa100c5a5a8b7f3b6cc1fbb2135fe7dde.tar.gz slock-39fb855aa100c5a5a8b7f3b6cc1fbb2135fe7dde.tar.xz  | |
Move screen unlocking inside cleanup()
| -rw-r--r-- | slock.c | 20 | 
1 files changed, 11 insertions, 9 deletions
@@ -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);  } @@ -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;  } @@ -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;  	} @@ -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;  | 
