This commit is contained in:
albert 2002-12-05 00:28:36 +00:00
parent c7e7b44284
commit ca4f216272

30
top.c
View File

@ -1319,9 +1319,9 @@ static int rc_read_old (const char *const buf, RCF_t *rc) {
case '0' ... '9': case '0' ... '9':
return -15; // not supposed to have digits here return -15; // not supposed to have digits here
case 's': // mostly for global rcfile // case 's': // mostly for global rcfile
rc->mode_secure = 1; // rc->mode_secure = 1;
break; // break;
case 'S': case 'S':
rc->win[0].winflags |= Show_CTIMES; rc->win[0].winflags |= Show_CTIMES;
break; break;
@ -1529,6 +1529,7 @@ static void before (char *me)
* First attempt to read the /etc/rcfile which contains two lines * First attempt to read the /etc/rcfile which contains two lines
* consisting of the secure mode switch and an update interval. * consisting of the secure mode switch and an update interval.
* It's presence limits what ordinary users are allowed to do. * It's presence limits what ordinary users are allowed to do.
* (it's actually an old-style config file)
* *
* Then build the local rcfile name and try to read a crufty old-top * Then build the local rcfile name and try to read a crufty old-top
* rcfile (whew, odoriferous), which may contain an embedded new-style * rcfile (whew, odoriferous), which may contain an embedded new-style
@ -1539,29 +1540,33 @@ static void before (char *me)
static void configs_read (void) static void configs_read (void)
{ {
char fbuf[MEDBUFSIZ]; char fbuf[MEDBUFSIZ];
const char *cp;
int i, fd; int i, fd;
RCF_t rcf; RCF_t rcf;
float delay = Rc.delay_time; float delay = Rc.delay_time;
// who says life's not fair -- at least the sys rcfiles are compatable // Read part of an old-style config in /etc/toprc
fd = open(SYS_RCFILESPEC, O_RDONLY); fd = open(SYS_RCFILESPEC, O_RDONLY);
if (fd > 0) { if (fd > 0) {
ssize_t num; ssize_t num;
num = read(fd, fbuf, sizeof(fbuf) - 1); num = read(fd, fbuf, sizeof(fbuf) - 1);
if (num > 0) { if (num > 0) {
if ((cp = strchr(fbuf, 's'))) Secure_mode = 1; const char *sec = strchr(fbuf, 's');
cp++; const char *eol = strchr(fbuf, '\n');
if ((cp = strchr(cp, '\n'))) sscanf(cp+1, "%f", &Rc.delay_time); if (eol) {
const char *two = eol+1; // line two
if (sec < eol) Secure_mode = !!sec;
eol = strchr(two, '\n');
if (eol && eol > two && isdigit(*two)) Rc.delay_time = atof(two);
}
} }
close(fd); close(fd);
} }
snprintf(Rc_name, sizeof(Rc_name), ".%src", Myname); snprintf(Rc_name, sizeof(Rc_name), ".%src", Myname); // eeew...
if (getenv("HOME")) if (getenv("HOME"))
snprintf(Rc_name, sizeof(Rc_name), "%s/.%src", getenv("HOME"), Myname); snprintf(Rc_name, sizeof(Rc_name), "%s/.%src", getenv("HOME"), Myname);
rcf = Rc; rcf = DEF_RCFILE;
fd = open(Rc_name, O_RDONLY); fd = open(Rc_name, O_RDONLY);
if (fd > 0) { if (fd > 0) {
ssize_t num; ssize_t num;
@ -1571,7 +1576,7 @@ static void configs_read (void)
fbuf[1] = '\n'; fbuf[1] = '\n';
fbuf[num+2] = '\0'; fbuf[num+2] = '\0';
if (rc_read_old(fbuf, &rcf) > 0) Crufty_rcf = 1; if (rc_read_old(fbuf, &rcf) > 0) Crufty_rcf = 1;
else rcf = Rc; // on failure, maybe mangled else rcf = DEF_RCFILE; // on failure, maybe mangled
rc_read_new(fbuf, &rcf); rc_read_new(fbuf, &rcf);
delay = rcf.delay_time; delay = rcf.delay_time;
} }
@ -1581,7 +1586,8 @@ static void configs_read (void)
// update Rc defaults, establish a Curwin and fix up the window stack // update Rc defaults, establish a Curwin and fix up the window stack
Rc.mode_altscr = rcf.mode_altscr; Rc.mode_altscr = rcf.mode_altscr;
Rc.mode_irixps = rcf.mode_irixps; Rc.mode_irixps = rcf.mode_irixps;
Curwin = Winstk[(rcf.win_index)]; if (rcf.win_index >= GROUPSMAX) rcf.win_index = 0;
Curwin = Winstk[rcf.win_index];
for (i = 0; i < GROUPSMAX; i++) Winstk[i]->rc = rcf.win[i]; for (i = 0; i < GROUPSMAX; i++) Winstk[i]->rc = rcf.win[i];
// lastly, establish the true runtime secure mode and delay time // lastly, establish the true runtime secure mode and delay time