tremoved fgets usage, increment offset until a line is read, dwm will drop all … | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 0e98090d653457488d74103dc44a1e2aba071895 | |
parent af4667a85a11a1c001e60894a7ec7458c208bc0d | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Sat, 3 Nov 2007 20:43:12 +0100 | |
removed fgets usage, increment offset until a line is read, dwm will drop all l… | |
Diffstat: | |
M dwm.c | 34 ++++++++++++++++++++++++-----… | |
1 file changed, 27 insertions(+), 7 deletions(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
t@@ -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; | |
t@@ -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) | |
t@@ -1300,12 +1305,27 @@ run(void) { | |
eprint("select failed\n"); | |
} | |
if(FD_ISSET(STDIN_FILENO, &rd)) { | |
- if((readin = (stext == fgets(stext, sizeof stext - 1, … | |
- stext[strlen(stext) - 1] = '\0'; /* remove tai… | |
- else if(feof(stdin)) | |
+ switch((r = read(STDIN_FILENO, stext + offset, len - o… | |
+ 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 -… | |
+ 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)) { |