diff options
| -rw-r--r-- | dwm.c | 22 | 
1 files changed, 5 insertions, 17 deletions
| @@ -1280,15 +1280,15 @@ restack(void) {  void  run(void) { -	char *p; -	int r, xfd;  	fd_set rd; +	int xfd;  	XEvent ev;  	/* main event loop, also reads status text from stdin */  	XSync(dpy, False);  	xfd = ConnectionNumber(dpy);  	readin = True; +	stext[sizeof stext - 1] = '\0'; /* 0-terminator is never touched */  	while(running) {  		FD_ZERO(&rd);  		if(readin) @@ -1300,22 +1300,10 @@ run(void) {  			eprint("select failed\n");  		}  		if(FD_ISSET(STDIN_FILENO, &rd)) { -			switch(r = read(STDIN_FILENO, stext, sizeof stext - 1)) { -			case -1: +			if(stext == fgets(stext, sizeof stext - 1, stdin)) +				stext[strlen(stext) - 1] = '\0'; /* remove tailing '\n' */ +			else  				strncpy(stext, strerror(errno), sizeof stext - 1); -				stext[sizeof stext - 1] = '\0'; -				readin = False; -				break; -			case 0: -				strncpy(stext, "EOF", 4); -				readin = False; -				break; -			default: -				for(stext[r] = '\0', p = stext + strlen(stext) - 1; p >= stext && *p == '\n'; *p-- = '\0'); -				for(; p >= stext && *p != '\n'; --p); -				if(p > stext) -					strncpy(stext, p + 1, sizeof stext); -			}  			drawbar();  		}  		while(XPending(dpy)) { | 
