From 9329d0dfe6e71f421cbc06baf4ccf8e8e78bbe03 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Yadav Date: Wed, 20 Jan 2021 13:07:11 +0530 Subject: [PATCH] Fixed bug in getcmd --- dwmblocks.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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]); + } } }