]> granicus.if.org Git - procps-ng/commitdiff
top: let's exploit the new standardized errno handling
authorJim Warner <james.warner@comcast.net>
Sat, 16 Dec 2017 06:00:00 +0000 (00:00 -0600)
committerCraig Small <csmall@enc.com.au>
Sat, 23 Dec 2017 06:44:34 +0000 (17:44 +1100)
With the library having now normalized errno handling,
perhaps it is time at least one program took advantage
of it. So, instead of printing just a message with the
programs's line number, top will now also provide that
associated errno string text, compliments of strerror.

[ with those newlib functions returning NULL, we can ]
[ use errno directly in strerror. for the ones which ]
[ yield an int, all we need do is invert such return ]
[ values before passing it to the strerror function. ]

Reference(s):

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

index 05080847cf52a196005111ed3b5eac54c43e8160..5b76f24aab2e5e80619ab29e2ebff38529081cf5 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -1895,7 +1895,7 @@ static void calibrate_fields (void) {
    char *s;
    const char *h;
    WIN_t *w = Curwin;
-   int i, varcolcnt, len;
+   int i, varcolcnt, len, rc;
 
    adj_geometry();
 
@@ -1974,8 +1974,8 @@ static void calibrate_fields (void) {
 
    build_headers();
 
-   if (procps_pids_reset(Pids_ctx, Pids_itms, Pids_itms_cur))
-      error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__));
+   if ((rc = procps_pids_reset(Pids_ctx, Pids_itms, Pids_itms_cur)))
+      error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__, strerror(-rc)));
 
    if (CHKw(Curwin, View_SCROLL))
       updt_scroll_msg();
@@ -2293,7 +2293,7 @@ static void cpus_refresh (void) {
 
    Stat_reap = procps_stat_reap(Stat_ctx, which, Stat_items, MAXTBL(Stat_items));
    if (!Stat_reap)
-      error_exit(fmtmk(N_fmt(LIB_errorcpu_fmt),__LINE__));
+      error_exit(fmtmk(N_fmt(LIB_errorcpu_fmt),__LINE__, strerror(errno)));
    // adapt to changes in total numa nodes (assuming it's even possible)
    if (Stat_reap->nodes->total && Stat_reap->nodes->total != Numa_node_tot) {
       Numa_node_tot = Stat_reap->nodes->total;
@@ -2328,7 +2328,7 @@ static void procs_refresh (void) {
    if (Monpidsidx) Pids_reap = procps_pids_select(Pids_ctx, Monpids, Monpidsidx, PIDS_SELECT_PID);
    else Pids_reap = procps_pids_reap(Pids_ctx, Thread_mode ? PIDS_FETCH_THREADS_TOO : PIDS_FETCH_TASKS_ONLY);
    if (!Pids_reap)
-      error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__));
+      error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__, strerror(errno)));
 
    // now refresh each window's stacks pointer array...
    if (n_alloc < n_reap) {
@@ -2361,7 +2361,7 @@ static void sysinfo_refresh (int forced) {
 
    if (3 <= cur_secs - sav_secs) {
       if (!(Mem_stack = procps_meminfo_select(Mem_ctx, Mem_items, MAXTBL(Mem_items))))
-         error_exit(fmtmk(N_fmt(LIB_errormem_fmt),__LINE__));
+         error_exit(fmtmk(N_fmt(LIB_errormem_fmt),__LINE__, strerror(errno)));
       sav_secs = cur_secs;
    }
 } // end: sysinfo_refresh
@@ -2995,7 +2995,7 @@ signify_that:
          * IMPORTANT stuff upon which all those lessor functions depend! */
 static void before (char *me) {
    struct sigaction sa;
-   int i;
+   int i, rc;
    int linux_version_code = procps_linux_version();
    enum stat_reap_type which = STAT_REAP_CPUS_AND_NODES;
 
@@ -3029,15 +3029,16 @@ static void before (char *me) {
       Cpu_States_fmts = N_unq(STATE_lin2x7_fmt);
 
    // get the total cpus (and, if possible, numa node total)
-   if (procps_stat_new(&Stat_ctx) < 0
-   || !(Stat_reap = procps_stat_reap(Stat_ctx, which, Stat_items, MAXTBL(Stat_items))))
-      error_exit(fmtmk(N_fmt(LIB_errorcpu_fmt),__LINE__));
+   if ((rc = procps_stat_new(&Stat_ctx)))
+      error_exit(fmtmk(N_fmt(LIB_errorcpu_fmt),__LINE__, strerror(-rc)));
+   if (!(Stat_reap = procps_stat_reap(Stat_ctx, which, Stat_items, MAXTBL(Stat_items))))
+      error_exit(fmtmk(N_fmt(LIB_errorcpu_fmt),__LINE__, strerror(errno)));
    Numa_node_tot = Stat_reap->nodes->total;
    Cpu_cnt = Stat_reap->cpus->total;
 
    // prepare for memory stats from new library API ...
-   if (procps_meminfo_new(&Mem_ctx) < 0)
-      error_exit(fmtmk(N_fmt(LIB_errormem_fmt),__LINE__));
+   if ((rc = procps_meminfo_new(&Mem_ctx)))
+      error_exit(fmtmk(N_fmt(LIB_errormem_fmt),__LINE__, strerror(-rc)));
 
    // establish max depth for newlib pids stack (# of result structs)
    Pids_itms = alloc_c(sizeof(enum pids_item) * MAXTBL(Fieldstab));
@@ -3046,8 +3047,8 @@ static void before (char *me) {
          Pids_itms[i] = PIDS_noop;
    Pids_itms_cur = MAXTBL(Fieldstab);
    // we will identify specific items in the build_headers() function
-   if (procps_pids_new(&Pids_ctx, Pids_itms, Pids_itms_cur))
-      error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__));
+   if ((rc = procps_pids_new(&Pids_ctx, Pids_itms, Pids_itms_cur)))
+      error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__, strerror(-rc)));
 
 #ifndef SIGRTMAX       // not available on hurd, maybe others too
 #define SIGRTMAX 32
@@ -4721,7 +4722,7 @@ static void forest_begin (WIN_t *q) {
 #ifndef TREE_SCANALL
       if (!(procps_pids_sort(Pids_ctx, Seed_ppt, PIDSmaxt
          , PIDS_TIME_START, PIDS_SORT_ASCEND)))
-            error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__));
+            error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__, strerror(errno)));
 #endif
       for (i = 0; i < PIDSmaxt; i++)           // avoid any hidepid distortions
          if (!rLevel)                          // identify real or pretend trees
@@ -5316,7 +5317,7 @@ static int window_show (WIN_t *q, int wmax) {
       else if (item == PIDS_TICS_ALL && CHKw(q, Show_CTIMES))
          item = PIDS_TICS_ALL_C;
       if (!(procps_pids_sort(Pids_ctx, q->ppt , PIDSmaxt, item, sORDER)))
-         error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__));
+         error_exit(fmtmk(N_fmt(LIB_errorpid_fmt),__LINE__, strerror(errno)));
    }
 
    i = q->begtask;
index 051c3a10bf4324f68bb207c41e96e7b3527153ca..54c7defa22fda7ee3e16fe8383ebdf620cc7960c 100644 (file)
@@ -496,9 +496,9 @@ static void build_norm_nlstab (void) {
    .                 padding with extra spaces as necessary */
    Norm_nlstab[WORD_abv_mem_txt] = _("Mem ");
    Norm_nlstab[WORD_abv_swp_txt] = _("Swap");
-   Norm_nlstab[LIB_errormem_fmt] = _("library failed memory statistics, at %d");
-   Norm_nlstab[LIB_errorcpu_fmt] = _("library failed cpu statistics, at %d");
-   Norm_nlstab[LIB_errorpid_fmt] = _("library failed pids statistics, at %d");
+   Norm_nlstab[LIB_errormem_fmt] = _("library failed memory statistics, at %d: %s");
+   Norm_nlstab[LIB_errorcpu_fmt] = _("library failed cpu statistics, at %d: %s");
+   Norm_nlstab[LIB_errorpid_fmt] = _("library failed pids statistics, at %d: %s");
    Norm_nlstab[BAD_memscale_fmt] = _("bad memory scaling arg '%c'");
 }