watch: tolerate umlauts
This commit is contained in:
parent
7ed102fd76
commit
c0f3df30ca
1
NEWS
1
NEWS
@ -6,6 +6,7 @@ top: normal exit code should be 0 #341272 #354255
|
|||||||
pgrep: usage error should exit with 2 #413383
|
pgrep: usage error should exit with 2 #413383
|
||||||
vmstat: use EXIT_FAILURE -- thanks Yoshio Nakamura #425492
|
vmstat: use EXIT_FAILURE -- thanks Yoshio Nakamura #425492
|
||||||
sysctl: fix crash -- thanks Steinar Gunderson #423704
|
sysctl: fix crash -- thanks Steinar Gunderson #423704
|
||||||
|
watch: tolerate umlauts #207103
|
||||||
|
|
||||||
procps-3.2.6 --> procps-3.2.7
|
procps-3.2.6 --> procps-3.2.7
|
||||||
|
|
||||||
|
2
TODO
2
TODO
@ -45,6 +45,8 @@ Tolerate color, bold, underline, etc. #129334
|
|||||||
|
|
||||||
Tolerate stderr. #420377 #155227 #225549
|
Tolerate stderr. #420377 #155227 #225549
|
||||||
|
|
||||||
|
Tolerate VT100 line-drawing characters. Maybe translate them.
|
||||||
|
|
||||||
---------------------- w --------------------------
|
---------------------- w --------------------------
|
||||||
|
|
||||||
The LOGIN@ column sometimes has a space in it. This makes correct
|
The LOGIN@ column sometimes has a space in it. This makes correct
|
||||||
|
12
top.c
12
top.c
@ -654,9 +654,12 @@ static void show_special (int interact, const char *glob)
|
|||||||
while ((lin_end = strchr(glob, '\n'))) {
|
while ((lin_end = strchr(glob, '\n'))) {
|
||||||
|
|
||||||
/* create a local copy we can extend and otherwise abuse */
|
/* create a local copy we can extend and otherwise abuse */
|
||||||
memcpy(lin, glob, (unsigned)(lin_end - glob)); FIXME -- buffer overflow
|
size_t amt = lin_end - glob;
|
||||||
|
if(amt > sizeof lin - 1)
|
||||||
|
amt = sizeof lin - 1; // shit happens
|
||||||
|
memcpy(lin, glob, amt);
|
||||||
/* zero terminate this part and prepare to parse substrings */
|
/* zero terminate this part and prepare to parse substrings */
|
||||||
lin[lin_end - glob] = '\0';
|
lin[amt] = '\0';
|
||||||
room = Screen_cols;
|
room = Screen_cols;
|
||||||
sub_beg = sub_end = lin;
|
sub_beg = sub_end = lin;
|
||||||
*(rp = row) = '\0';
|
*(rp = row) = '\0';
|
||||||
@ -669,6 +672,9 @@ static void show_special (int interact, const char *glob)
|
|||||||
cap = Curwin->captab[(int)*sub_end];
|
cap = Curwin->captab[(int)*sub_end];
|
||||||
*sub_end = '\0';
|
*sub_end = '\0';
|
||||||
snprintf(tmp, sizeof(tmp), "%s%.*s%s", cap, room, sub_beg, Caps_off);
|
snprintf(tmp, sizeof(tmp), "%s%.*s%s", cap, room, sub_beg, Caps_off);
|
||||||
|
amt = strlen(tmp);
|
||||||
|
if(rp - tmp + amt + 1 > sizeof tmp)
|
||||||
|
goto overflow; // shit happens
|
||||||
rp = scat(rp, tmp);
|
rp = scat(rp, tmp);
|
||||||
room -= (sub_end - sub_beg);
|
room -= (sub_end - sub_beg);
|
||||||
sub_beg = ++sub_end;
|
sub_beg = ++sub_end;
|
||||||
@ -678,7 +684,7 @@ static void show_special (int interact, const char *glob)
|
|||||||
}
|
}
|
||||||
if (unlikely(0 >= room)) break; /* skip substrings that won't fit */
|
if (unlikely(0 >= room)) break; /* skip substrings that won't fit */
|
||||||
}
|
}
|
||||||
|
overflow:
|
||||||
if (interact) PUTT("%s%s\n", row, Cap_clr_eol);
|
if (interact) PUTT("%s%s\n", row, Cap_clr_eol);
|
||||||
else PUFF("%s%s\n", row, Cap_clr_eol);
|
else PUFF("%s%s\n", row, Cap_clr_eol);
|
||||||
glob = ++lin_end; /* point to next line (maybe) */
|
glob = ++lin_end; /* point to next line (maybe) */
|
||||||
|
4
watch.c
4
watch.c
@ -296,10 +296,10 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
move(y, x);
|
move(y, x);
|
||||||
if (option_differences) {
|
if (option_differences) {
|
||||||
int oldch = inch();
|
chtype oldch = inch();
|
||||||
char oldc = oldch & A_CHARTEXT;
|
char oldc = oldch & A_CHARTEXT;
|
||||||
attr = !first_screen
|
attr = !first_screen
|
||||||
&& (c != oldc
|
&& ((char)c != oldc
|
||||||
||
|
||
|
||||||
(option_differences_cumulative
|
(option_differences_cumulative
|
||||||
&& (oldch & A_ATTRIBUTES)));
|
&& (oldch & A_ATTRIBUTES)));
|
||||||
|
Loading…
Reference in New Issue
Block a user