diff options
| author | Anselm R. Garbe <garbeam@gmail.com> | 2007-11-03 20:43:12 +0100 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@gmail.com> | 2007-11-03 20:43:12 +0100 | 
| commit | 0e98090d653457488d74103dc44a1e2aba071895 (patch) | |
| tree | 074eedd4f7ad7838f02c1af8e49f8a5228142a9e /dwm.c | |
| parent | af4667a85a11a1c001e60894a7ec7458c208bc0d (diff) | |
removed fgets usage, increment offset until a line is read, dwm will drop all lines read in one call, except the first!!! one (previously it preferred the last) - but the current approach is simplier and works better for general purpose in conjunction with the offset handling
Diffstat (limited to 'dwm.c')
| -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)) {  | 
