Fix from PR7655: translation of keyboard command in systat is Wrong.

(breaks netstat's :ignore command for upper-case service names)
This commit is contained in:
sommerfeld 1999-08-02 02:01:57 +00:00
parent f7141a0ffb
commit 728f40d730
2 changed files with 22 additions and 11 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: cmds.c,v 1.9 1998/12/19 22:26:13 christos Exp $ */
/* $NetBSD: cmds.c,v 1.10 1999/08/02 02:01:57 sommerfeld Exp $ */
/*-
* Copyright (c) 1980, 1992, 1993
@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)cmds.c 8.2 (Berkeley) 4/29/95";
#endif
__RCSID("$NetBSD: cmds.c,v 1.9 1998/12/19 22:26:13 christos Exp $");
__RCSID("$NetBSD: cmds.c,v 1.10 1999/08/02 02:01:57 sommerfeld Exp $");
#endif /* not lint */
#include <stdlib.h>
@ -185,13 +185,19 @@ status()
error("Showing %s, refresh every %d seconds.", curcmd->c_name, naptime);
}
/* case insensitive prefix comparison */
int
prefix(s1, s2)
char *s1, *s2;
{
char c1, c2;
while (*s1 == *s2) {
if (*s1 == '\0')
while (1) {
c1 = *s1 >= 'A' && *s1 <= 'Z' ? *s1 + 'a' - 'A' : *s1;
c2 = *s2 >= 'A' && *s2 <= 'Z' ? *s2 + 'a' - 'A' : *s2;
if (c1 != c2)
break;
if (c1 == '\0')
return (1);
s1++, s2++;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: keyboard.c,v 1.5 1998/07/12 05:59:00 mrg Exp $ */
/* $NetBSD: keyboard.c,v 1.6 1999/08/02 02:01:57 sommerfeld Exp $ */
/*-
* Copyright (c) 1980, 1992, 1993
@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)keyboard.c 8.1 (Berkeley) 6/6/93";
#endif
__RCSID("$NetBSD: keyboard.c,v 1.5 1998/07/12 05:59:00 mrg Exp $");
__RCSID("$NetBSD: keyboard.c,v 1.6 1999/08/02 02:01:57 sommerfeld Exp $");
#endif /* not lint */
#include <sys/types.h>
@ -55,8 +55,8 @@ __RCSID("$NetBSD: keyboard.c,v 1.5 1998/07/12 05:59:00 mrg Exp $");
int
keyboard()
{
char ch, *line;
int linesz;
char ch, rch, *line;
int i, linesz;
sigset_t set;
sigemptyset(&set);
@ -79,6 +79,7 @@ keyboard()
clearerr(stdin);
continue;
}
rch = ch;
if (ch >= 'A' && ch <= 'Z')
ch += 'a' - 'A';
if (col == 0) {
@ -124,15 +125,19 @@ keyboard()
clrtoeol();
continue;
}
if (isprint(ch) || ch == ' ') {
if (isprint(rch) || ch == ' ') {
if (col < linesz) {
line[col] = ch;
mvaddch(CMDLINE, col, ch);
line[col] = rch;
mvaddch(CMDLINE, col, rch);
col++;
}
}
} while (col == 0 || (ch != '\r' && ch != '\n'));
line[col] = '\0';
/* pass commands as lowercase */
for (i = 1; i < col && line[i] != ' '; i++)
if (line[i] >= 'A' && line[i] <= 'Z')
line[i] += 'a' - 'A';
sigprocmask(SIG_BLOCK, &set, NULL);
command(line + 1);
sigprocmask(SIG_UNBLOCK, &set, NULL);