diff --git a/dwmblocks.c b/dwmblocks.c index 744426c..3888547 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -19,8 +19,8 @@ typedef struct { char *const pathc; const int interval; const int signal; - char cmdoutcur[CMDLENGTH]; - char cmdoutprv[CMDLENGTH]; + char cmdoutcur[CMDLENGTH + 1]; + char cmdoutprv[CMDLENGTH + 1]; } Block; #include "blocks.h" @@ -111,12 +111,20 @@ getcmd(Block *block, int sigval) perror("getcmd - child - execv"); _exit(127); default: + { + size_t trd = 0; + ssize_t rd; + close(fd[1]); - if (read(fd[0], block->cmdoutcur, CMDLENGTH) == -1) { + do + rd = read(fd[0], block->cmdoutcur + trd, CMDLENGTH - trd); + while (rd > 0 && (trd += rd) < CMDLENGTH); + if (rd == -1) { perror("getcmd - read"); exit(1); } close(fd[0]); + } } }