Fix an issue with ktrdump(8) where it would not print all entries in the

KTR buffer.

This happens when 'i' tries to wrap around from 0 to 'entries - 1'. Since 'i'
is a signed integer the modulo operation actually returns a negative number.

Fix this by computing the next index to use "by hand" instead of relying
on the modulo operator.
This commit is contained in:
Neel Natu 2014-03-14 21:35:16 +00:00
parent 65d07b6871
commit f8c8b7ee8f

View File

@ -219,8 +219,11 @@ main(int ac, char **av)
/*
* Now tear through the trace buffer.
*/
if (!iflag)
i = (index - 1) % entries;
if (!iflag) {
i = index - 1;
if (i < 0)
i = entries - 1;
}
tlast = -1;
for (;;) {
if (buf[i].ktr_desc == NULL)
@ -288,7 +291,8 @@ next: if ((c = *p++) == '\0')
if (!iflag) {
if (i == index)
break;
i = (i - 1) % entries;
if (--i < 0)
i = entries - 1;
} else {
if (++i == entries)
break;