]> granicus.if.org Git - procps-ng/commitdiff
top: refactor some of that configuration files support
authorJim Warner <james.warner@comcast.net>
Sun, 17 Jun 2018 05:00:00 +0000 (00:00 -0500)
committerCraig Small <csmall@enc.com.au>
Sat, 23 Jun 2018 12:03:56 +0000 (22:03 +1000)
The 'config_file()' function was getting a little long
in the tooth, so this commit simply renames/rearranges
some stuff anticipating 'other filters' in the rcfile.

Signed-off-by: Jim Warner <james.warner@comcast.net>
top/top.c
top/top.h

index f1ff8a891213c71feec081da1976593a261bf849..f0655c5fd070010e7b0277ff06c141c480793ba6 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -3625,7 +3625,7 @@ static void before (char *me) {
 
 
         /*
-         * A config_file *Helper* function responsible for converting
+         * A configs_file *Helper* function responsible for converting
          * a single window's old rc stuff into a new style rcfile entry */
 static int config_cvt (WIN_t *q) {
    static struct {
@@ -3697,10 +3697,90 @@ static int config_cvt (WIN_t *q) {
 } // end: config_cvt
 
 
+        /*
+         * A configs_file *Helper* function responsible for reading
+         * and validating a configuration file's 'Inspection' entries */
+static int config_insp (FILE *fp, char *buf, size_t size) {
+   int i;
+
+   // we'll start off Inspect stuff with 1 'potential' blank line
+   // ( only realized if we end up with Inspect.total > 0 )
+   for (i = 0, Inspect.raw = alloc_s("\n");;) {
+    #define iT(element) Inspect.tab[i].element
+      size_t lraw = strlen(Inspect.raw) +1;
+      int n, x;
+      char *s;
+
+      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;
+      lraw += strlen(buf) +1;
+      Inspect.raw = alloc_r(Inspect.raw, lraw);
+      strcat(Inspect.raw, buf);
+
+      if (buf[0] == '#' || buf[0] == '\n') continue;
+      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
+      for (n = 0, x = strlen(buf); n < x; n++) {
+         if ((buf[n] != '\t' && buf[n] != '\n')
+          && (buf[n] < ' ')) {
+            buf[n] = '.';
+            Rc_questions = 1;
+         }
+      }
+      if (!(s = strtok(buf, "\t\n"))) { Rc_questions = 1; continue; }
+      iT(type) = alloc_s(s);
+      if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; continue; }
+      iT(name) = alloc_s(s);
+      if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; continue; }
+      iT(fmts) = alloc_s(s);
+
+      switch (toupper(buf[0])) {
+         case 'F':
+            iT(func) = insp_do_file;
+            break;
+         case 'P':
+            iT(func) = insp_do_pipe;
+            break;
+         default:
+            Rc_questions = 1;
+            continue;
+      }
+      iT(farg) = (strstr(iT(fmts), "%d")) ? 1 : 0;
+      iT(fstr) = alloc_c(FNDBUFSIZ);
+      iT(flen) = 0;
+
+      ++i;
+    #undef iT
+   } // end: for ('inspect' entries)
+
+   Inspect.total = i;
+#ifndef INSP_OFFDEMO
+   if (!Inspect.total) {
+    #define mkS(n) N_txt(YINSP_demo ## n ## _txt)
+      const char *sels[] = { mkS(01), mkS(02), mkS(03) };
+      Inspect.total = Inspect.demo = MAXTBL(sels);
+      Inspect.tab = alloc_c(sizeof(struct I_ent) * Inspect.total);
+      for (i = 0; i < Inspect.total; i++) {
+         Inspect.tab[i].type = alloc_s(N_txt(YINSP_deqtyp_txt));
+         Inspect.tab[i].name = alloc_s(sels[i]);
+         Inspect.tab[i].func = insp_do_demo;
+         Inspect.tab[i].fmts = alloc_s(N_txt(YINSP_deqfmt_txt));
+         Inspect.tab[i].fstr = alloc_c(FNDBUFSIZ);
+      }
+    #undef mkS
+   }
+#endif
+   return 0;
+} // end: config_insp
+
+
         /*
          * A configs_reads *Helper* function responsible for processing
          * a configuration file (personal or system-wide default) */
-static const char *config_file (FILE *fp, const char *name, float *delay) {
+static const char *configs_file (FILE *fp, const char *name, float *delay) {
    char fbuf[LRGBUFSIZ];
    int i, tmp_whole, tmp_fract;
    const char *p = NULL;
@@ -3807,78 +3887,11 @@ static const char *config_file (FILE *fp, const char *name, float *delay) {
    if (Rc.zero_suppress < 0 || Rc.zero_suppress > 1)
       Rc.zero_suppress = 0;
 
-   // we'll start off Inspect stuff with 1 'potential' blank line
-   // ( only realized if we end up with Inspect.total > 0 )
-   for (i = 0, Inspect.raw = alloc_s("\n");;) {
-    #define iT(element) Inspect.tab[i].element
-      size_t lraw = strlen(Inspect.raw) +1;
-      int n, x;
-      char *s;
-
-      if (i < 0 || (size_t)i >= INT_MAX / sizeof(struct I_ent)) break;
-      if (lraw >= INT_MAX - sizeof(fbuf)) break;
-
-      if (!fgets(fbuf, sizeof(fbuf), fp)) break;
-      lraw += strlen(fbuf) +1;
-      Inspect.raw = alloc_r(Inspect.raw, lraw);
-      strcat(Inspect.raw, fbuf);
-
-      if (fbuf[0] == '#' || fbuf[0] == '\n') continue;
-      Inspect.tab = alloc_r(Inspect.tab, sizeof(struct I_ent) * (i + 1));
+   // lastly, let's process any optional glob(s) ...
+   config_insp(fp, fbuf, sizeof(fbuf));
 
-      // part of this is used in a show_special() call, so let's sanitize it
-      for (n = 0, x = strlen(fbuf); n < x; n++) {
-         if ((fbuf[n] != '\t' && fbuf[n] != '\n')
-          && (fbuf[n] < ' ')) {
-            fbuf[n] = '.';
-            Rc_questions = 1;
-         }
-      }
-      if (!(s = strtok(fbuf, "\t\n"))) { Rc_questions = 1; continue; }
-      iT(type) = alloc_s(s);
-      if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; continue; }
-      iT(name) = alloc_s(s);
-      if (!(s = strtok(NULL, "\t\n"))) { Rc_questions = 1; continue; }
-      iT(fmts) = alloc_s(s);
-
-      switch (toupper(fbuf[0])) {
-         case 'F':
-            iT(func) = insp_do_file;
-            break;
-         case 'P':
-            iT(func) = insp_do_pipe;
-            break;
-         default:
-            Rc_questions = 1;
-            continue;
-      }
-      iT(farg) = (strstr(iT(fmts), "%d")) ? 1 : 0;
-      iT(fstr) = alloc_c(FNDBUFSIZ);
-      iT(flen) = 0;
-
-      ++i;
-    #undef iT
-   } // end: for ('inspect' entries)
-
-   Inspect.total = i;
-#ifndef INSP_OFFDEMO
-   if (!Inspect.total) {
-    #define mkS(n) N_txt(YINSP_demo ## n ## _txt)
-      const char *sels[] = { mkS(01), mkS(02), mkS(03) };
-      Inspect.total = Inspect.demo = MAXTBL(sels);
-      Inspect.tab = alloc_c(sizeof(struct I_ent) * Inspect.total);
-      for (i = 0; i < Inspect.total; i++) {
-         Inspect.tab[i].type = alloc_s(N_txt(YINSP_deqtyp_txt));
-         Inspect.tab[i].name = alloc_s(sels[i]);
-         Inspect.tab[i].func = insp_do_demo;
-         Inspect.tab[i].fmts = alloc_s(N_txt(YINSP_deqfmt_txt));
-         Inspect.tab[i].fstr = alloc_c(FNDBUFSIZ);
-      }
-    #undef mkS
-   }
-#endif
    return NULL;
-} // end: config_file
+} // end: configs_file
 
 
         /*
@@ -3961,14 +3974,14 @@ static void configs_reads (void) {
    }
 
    if (fp) {
-      p = config_file(fp, Rc_name, &tmp_delay);
+      p = configs_file(fp, Rc_name, &tmp_delay);
       fclose(fp);
       if (p) goto default_or_error;
    } else {
 system_default:
       fp = fopen(SYS_RCDEFAULTS, "r");
       if (fp) {
-         p = config_file(fp, SYS_RCDEFAULTS, &tmp_delay);
+         p = configs_file(fp, SYS_RCDEFAULTS, &tmp_delay);
          fclose(fp);
          if (p) goto default_or_error;
       }
index 54b1e0d6bd1a34c4990a44f7964cd64f51c4c0ad..264e3de0be336198471d1e6249463ee4b67f81ba 100644 (file)
--- a/top/top.h
+++ b/top/top.h
@@ -761,7 +761,8 @@ typedef struct WIN_t {
 /*------  Startup routines  ----------------------------------------------*/
 //atic void          before (char *me);
 //atic int           config_cvt (WIN_t *q);
-//atic const char   *config_file (FILE *fp, const char *name, float *delay);
+//atic int           config_insp (FILE *fp, char *buf, size_t size);
+//atic const char   *configs_file (FILE *fp, const char *name, float *delay);
 //atic int           configs_path (const char *const fmts, ...);
 //atic void          configs_reads (void);
 //atic void          parse_args (char **args);