JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
full names in -v output of dwm
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 77727a8..886fdc3 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -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,10 +1305,25 @@ run(void) {
                        eprint("select failed\n");
                }
                if(FD_ISSET(STDIN_FILENO, &rd)) {
-                       if(stext == fgets(stext, sizeof stext - 1, stdin))
-                               stext[strlen(stext) - 1] = '\0'; /* remove tailing '\n' */
-                       else
-                               strncpy(stext, strerror(errno), sizeof stext - 1);
+                       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);
+                               readin = False;
+                               break;
+                       default:
+                               stext[offset + r] = '\0';
+                               for(p = stext; *p && *p != '\n'; p++);
+                               if(*p == '\n') {
+                                       *p = '\0';
+                                       offset = 0;
+                               }
+                               else
+                                       offset = (offset + r < len - 1) ? offset + r : 0;
+                       }
                        drawbar();
                }
                while(XPending(dpy)) {
@@ -1850,7 +1870,8 @@ zoom(const char *arg) {
 int
 main(int argc, char *argv[]) {
        if(argc == 2 && !strcmp("-v", argv[1]))
-               eprint("dwm-"VERSION", © 2006-2007 A. R. Garbe, S. van Dijk, J. Salmi, P. Hruby, S. Nagy\n");
+               eprint("dwm-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk, "
+                      "Jukka Salmi, Premysl Hruby, Szabolcs Nagy\n");
        else if(argc != 1)
                eprint("usage: dwm [-v]\n");