]> granicus.if.org Git - procps-ng/commitdiff
top: warn users if rcfile save prevents older top read
authorJim Warner <james.warner@comcast.net>
Fri, 29 May 2020 05:00:00 +0000 (00:00 -0500)
committerCraig Small <csmall@dropbear.xyz>
Sun, 31 May 2020 12:06:26 +0000 (22:06 +1000)
I'm about to break older top rcfile compatibility when
preserving those two new toggles. And, though this has
happened several times over the years, we never issued
any warnings that such thing was just about to happen.

So, this patch corrects the long standing shortcoming.

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

index ea1a8fe21bd11e0b350dc9e2191ad8443efb43cc..a40b1d335c35825a2b4813030d07d53b1f8453a2 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -82,6 +82,7 @@ static sigset_t Sigwinch_set;
 static char  Rc_name [OURPATHSZ];
 static RCF_t Rc = DEF_RCFILE;
 static int   Rc_questions;
+static int   Rc_compatibilty;
 
         /* SMP, Irix/Solaris mode, Linux 2.5.xx support (and beyond) */
 static long        Hertz;
@@ -3613,6 +3614,10 @@ static const char *configs_file (FILE *fp, const char *name, float *delay) {
    if (Rc.zero_suppress < 0 || Rc.zero_suppress > 1)
       Rc.zero_suppress = 0;
 
+   // prepare to warn that older top can no longer read rcfile ...
+   if (Rc.id != RCF_VERSION_ID)
+      Rc_compatibilty = 1;
+
    // lastly, let's process any optional glob(s) ...
    // (darn, must do osel 1st even though alphabetically 2nd)
    fbuf[0] = '\0';
@@ -4638,6 +4643,12 @@ static void write_rcfile (void) {
          return;
       Rc_questions = 0;
    }
+   if (Rc_compatibilty) {
+      show_pmt(N_txt(XTRA_warnold_txt));
+      if ('y' != tolower(iokey(1)))
+         return;
+      Rc_compatibilty = 0;
+   }
    if (!(fp = fopen(Rc_name, "w"))) {
       show_msg(fmtmk(N_fmt(FAIL_rc_open_fmt), Rc_name, strerror(errno)));
       return;
index c69385df5a8b40926c0c6876ae25a30256898c84..cfb903217a81fcb8b0c3aa970a38118a20dabe2d 100644 (file)
@@ -509,6 +509,7 @@ static void build_norm_nlstab (void) {
    Norm_nlstab[XTRA_vforest_fmt] = _("PID to collapse/expand [default pid = %d]");
    Norm_nlstab[XTRA_size2up_txt] = _("terminal is not wide enough");
    Norm_nlstab[XTRA_modebad_txt] = _("wrong mode, command inactive");
+   Norm_nlstab[XTRA_warnold_txt] = _("saving prevents older top from reading, save anyway?");
 }
 
 
index e728b76334a6b1879bda51a1d3a56006fb72317d..daee67bdc9c9e3f6853c14286be71d623ba386b7 100644 (file)
@@ -83,7 +83,7 @@ enum norm_nls {
    WORD_eachcpu_fmt, WORD_exclude_txt, WORD_include_txt, WORD_noneone_txt,
    WORD_process_txt, WORD_threads_txt, WRITE_rcfile_fmt, WRONG_switch_fmt,
    XTRA_badflds_fmt, XTRA_fixwide_fmt, XTRA_modebad_txt, XTRA_size2up_txt,
-   XTRA_vforest_fmt, XTRA_warncfg_txt, XTRA_winsize_txt,
+   XTRA_vforest_fmt, XTRA_warncfg_txt, XTRA_warnold_txt, XTRA_winsize_txt,
 #ifndef INSP_OFFDEMO
    YINSP_demo01_txt, YINSP_demo02_txt, YINSP_demo03_txt, YINSP_deqfmt_txt,
    YINSP_deqtyp_txt, YINSP_dstory_txt,