8268361: Fix the infinite loop in next_line

Backport-of: 72672277e4dddf8e72f1c705cd5f57de40745635
This commit is contained in:
Roman Marchenko 2022-08-31 08:06:04 +00:00 committed by Yuri Nesterenko
parent 899d5f8414
commit 8392a311b8

View File

@ -62,8 +62,13 @@ static struct perfbuf {
#define DEC_64 "%"SCNd64
static void next_line(FILE *f) {
while (fgetc(f) != '\n');
static int next_line(FILE *f) {
int c;
do {
c = fgetc(f);
} while (c != '\n' && c != EOF);
return c;
}
/**
@ -92,7 +97,10 @@ static int get_totalticks(int which, ticks *pticks) {
&iowTicks, &irqTicks, &sirqTicks);
// Move to next line
next_line(fh);
if (next_line(fh) == EOF) {
fclose(fh);
return -2;
}
//find the line for requested cpu faster to just iterate linefeeds?
if (which != -1) {
@ -105,7 +113,10 @@ static int get_totalticks(int which, ticks *pticks) {
fclose(fh);
return -2;
}
next_line(fh);
if (next_line(fh) == EOF) {
fclose(fh);
return -2;
}
}
n = fscanf(fh, "cpu%*d " DEC_64 " " DEC_64 " " DEC_64 " " DEC_64 " "
DEC_64 " " DEC_64 " " DEC_64 "\n",