From 12b0b5b2cf00e397a6d9cef3f1bc5eb3c83241da Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Wed, 20 Jun 2018 00:00:00 -0500 Subject: [PATCH] top: refactored some more peripheral 'inspect' support These modifications are being made now in anticipation of some coming 'other filter' config file changes. Our entries must be written last to the rc file since that is where the users have been told to 'echo' additions. Therefore, that 'config_insp' function must be adapted to anticipate a passed buffer that was already primed. Signed-off-by: Jim Warner --- top/top.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/top/top.c b/top/top.c index bf26dcf7..a151fd63 100644 --- a/top/top.c +++ b/top/top.c @@ -3301,10 +3301,14 @@ static int config_cvt (WIN_t *q) { static int config_insp (FILE *fp, char *buf, size_t size) { int i; - // we'll start off Inspect stuff with 1 'potential' blank line + // we'll start off with a 'potential' blank or empty line // ( only realized if we end up with Inspect.total > 0 ) - for (i = 0, Inspect.raw = alloc_s("\n");;) { + if (!buf[0] || buf[0] != '\n') Inspect.raw = alloc_s("\n"); + else Inspect.raw = alloc_c(1); + + for (i = 0;;) { #define iT(element) Inspect.tab[i].element + #define nxtLINE { buf[0] = '\0'; continue; } size_t lraw = strlen(Inspect.raw) +1; int n, x; char *s; @@ -3312,12 +3316,12 @@ static int config_insp (FILE *fp, char *buf, size_t size) { if (i < 0 || (size_t)i >= INT_MAX / sizeof(struct I_ent)) break; if (lraw >= INT_MAX - size) break; - if (!fgets(buf, size, fp)) break; + if (!buf[0] && !fgets(buf, size, fp)) break; lraw += strlen(buf) +1; Inspect.raw = alloc_r(Inspect.raw, lraw); strcat(Inspect.raw, buf); - if (buf[0] == '#' || buf[0] == '\n') continue; + if (buf[0] == '#' || buf[0] == '\n') nxtLINE; Inspect.tab = alloc_r(Inspect.tab, sizeof(struct I_ent) * (i + 1)); // part of this is used in a show_special() call, so let's sanitize it @@ -3328,11 +3332,11 @@ static int config_insp (FILE *fp, char *buf, size_t size) { Rc_questions = 1; } } - if (!(s = strtok(buf, "\t\n"))) { Rc_questions = 1; continue; } + if (!(s = strtok(buf, "\t\n"))) { Rc_questions = 1; nxtLINE; } iT(type) = alloc_s(s); - if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; continue; } + if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; nxtLINE; } iT(name) = alloc_s(s); - if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; continue; } + if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; nxtLINE; } iT(fmts) = alloc_s(s); switch (toupper(buf[0])) { @@ -3344,14 +3348,16 @@ static int config_insp (FILE *fp, char *buf, size_t size) { break; default: Rc_questions = 1; - continue; + nxtLINE; } iT(farg) = (strstr(iT(fmts), "%d")) ? 1 : 0; iT(fstr) = alloc_c(FNDBUFSIZ); iT(flen) = 0; + buf[0] = '\0'; ++i; #undef iT + #undef nxtLINE } // end: for ('inspect' entries) Inspect.total = i;