diff options
| -rw-r--r-- | dwm.c | 34 | 
1 files changed, 27 insertions, 7 deletions
| @@ -1145,6 +1145,7 @@ quit(const char *arg) {  	readin = running = False;  } +  void  resize(Client *c, int x, int y, int w, int h, Bool sizehints) {  	XWindowChanges wc; @@ -1280,15 +1281,19 @@ restack(void) {  void  run(void) { +	char *p;  	fd_set rd; -	int xfd; +	int r, xfd; +	unsigned int len, offset;  	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 */ +	offset = 0; +	len = sizeof stext - 1; +	stext[len] = '\0'; /* 0-terminator is never touched */  	while(running) {  		FD_ZERO(&rd);  		if(readin) @@ -1300,12 +1305,27 @@ run(void) {  			eprint("select failed\n");  		}  		if(FD_ISSET(STDIN_FILENO, &rd)) { -			if((readin = (stext == fgets(stext, sizeof stext - 1, stdin)))) -				stext[strlen(stext) - 1] = '\0'; /* remove tailing '\n' */ -			else if(feof(stdin)) +			switch((r = read(STDIN_FILENO, stext + offset, len - offset))) { +			case -1: +				strncpy(stext, strerror(errno), len); +				readin = False; +				break; +			case 0:  				strncpy(stext, "EOF", 4); -			else /* error occured */ -				strncpy(stext, strerror(errno), sizeof stext - 1); +				readin = False; +				break; +			default: +				stext[offset + r] = '\0'; +				for(p = stext; *p && *p != '\n'; p++); +				if(*p == '\n') { +					*p = '\0'; +					offset = 0; +				} +				else if(offset + r < len - 1) +					offset += r; +				else +					offset = 0; +			}  			drawbar();  		}  		while(XPending(dpy)) { | 
