Bug 130899

Summary: Incorrect save state for the "I" option in saved ~/.toprc
Product: Red Hat Enterprise Linux 3 Reporter: Pancrazio `ezio' de Mauro <pdemauro>
Component: procpsAssignee: Karel Zak <kzak>
Status: CLOSED CURRENTRELEASE QA Contact: Brian Brock <bbrock>
Severity: medium Docs Contact:
Priority: medium    
Version: 3.0CC: tao
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2004-11-18 07:59:14 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Pancrazio `ezio' de Mauro 2004-08-25 17:00:50 UTC
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7)
Gecko/20040803 Firefox/0.9.3

Description of problem:
The "I" option in top, used to toggle Irix mode, is icorrectly saved
and restored from ~/.toprc, causing Irix mode to flip-flop every time
top is run.

This is how to reproduce the problem:

1) $ rm ~/.toprc
2) $ top
3) Save the current configuration pressing the W key
4) Quit top pressing the q key
5) ~/.toprc contains the I option even if it shouldn't!
6) run top again
7) Save the current configuration pressing the W key
8) Quit top pressing the q key
9) Now ~/.toprc does not contain I anymore!

So the I option was toggled withtout the user's intervention.



Version-Release number of selected component (if applicable):
procps-2.0.13-9.2E

How reproducible:
Always

Steps to Reproduce:
Please see above

Actual Results:  Please see above

Expected Results:  Please see above

Additional info:

This is what happens:

in the source code for top, here is the "save options" code (top.c
line 1987):

       if (!Irixmode)
               fprintf(fp, "%c", 'I');

and this is the "parse options" code (top.c line 221):

       case 'I':
               Irixmode = 1;
               break;

in other words, "I" is saved to the file if the Irixmode variable is
false. At the same time, Irixmode is set to true if "I" is found in
the configuration file, and this leads to the unwanted toggling.

This can be fixed at least in two ways.

The two possibilities I can think of are either (file names and line
numbers refer to pristine source code + spec patches applied):

       top.c line 1987: "if(!Irixmode)" becomes "if(Irixmode)"

or

       top.c line 222: "Irixmode = 1" becomes "Irixmode = 0"

This last option is probably preferable and it would mean undoing the
second chunk in procps-2.0.13-noirixmode.patch which says:

       --- procps-2.0.13/top.c.irixmode        2003-09-23
12:26:28.000000000 +0200
       +++ procps-2.0.13/top.c 2003-09-23 12:26:32.000000000 +0200
       @@ -219,7 +219,7 @@
                       case '\n':
                               break;
                       case 'I':
       -                       Irixmode = 0;
       +                       Irixmode = 1;
                               break;
                       default:
                               fprintf(stderr, "Wrong configuration
option %c\n", i);

and it was probably introduced by mistake with the noirixmode patch.

Comment 1 Daniel Walsh 2004-08-30 19:37:27 UTC
Have you looked at procps-2.0.17-10
  It seems to have this fixed.   It is in U3.

Dan