mirror of
https://github.com/systemd/systemd.git
synced 2024-10-27 18:55:40 +03:00
readahead: make sure to close pack file before exiting, to be valgrind clean
This commit is contained in:
parent
97fa0e708f
commit
ebfb7506fe
@ -34,13 +34,13 @@
|
|||||||
|
|
||||||
int main_analyze(const char *pack_path)
|
int main_analyze(const char *pack_path)
|
||||||
{
|
{
|
||||||
char line[1024];
|
char line[LINE_MAX];
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
FILE *pack;
|
FILE *pack;
|
||||||
int a;
|
int a;
|
||||||
int missing = 0;
|
int missing = 0;
|
||||||
off_t size;
|
off_t size;
|
||||||
long tsize = 0;
|
off_t tsize = 0;
|
||||||
uint64_t inode;
|
uint64_t inode;
|
||||||
uint32_t b;
|
uint32_t b;
|
||||||
uint32_t c;
|
uint32_t c;
|
||||||
@ -52,22 +52,24 @@ int main_analyze(const char *pack_path)
|
|||||||
pack = fopen(pack_path, "re");
|
pack = fopen(pack_path, "re");
|
||||||
if (!pack) {
|
if (!pack) {
|
||||||
log_error("Pack file missing.");
|
log_error("Pack file missing.");
|
||||||
return EXIT_FAILURE;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fgets(line, sizeof(line), pack)) {
|
if (!fgets(line, sizeof(line), pack)) {
|
||||||
log_error("Pack file corrupt.");
|
log_error("Pack file corrupt.");
|
||||||
return EXIT_FAILURE;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strstr(line, READAHEAD_PACK_FILE_VERSION)) {
|
char_array_0(line);
|
||||||
|
|
||||||
|
if (!endswith(line, READAHEAD_PACK_FILE_VERSION)) {
|
||||||
log_error("Pack file version incompatible with this parser.");
|
log_error("Pack file version incompatible with this parser.");
|
||||||
return EXIT_FAILURE;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((a = getc(pack)) == EOF) {
|
if ((a = getc(pack)) == EOF) {
|
||||||
log_error("Pack file corrupt.");
|
log_error("Pack file corrupt.");
|
||||||
return EXIT_FAILURE;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stdout, " pct sections size: path\n");
|
fprintf(stdout, " pct sections size: path\n");
|
||||||
@ -84,14 +86,14 @@ int main_analyze(const char *pack_path)
|
|||||||
|
|
||||||
if (fread(&inode, sizeof(inode), 1, pack) != 1) {
|
if (fread(&inode, sizeof(inode), 1, pack) != 1) {
|
||||||
log_error("Pack file corrupt.");
|
log_error("Pack file corrupt.");
|
||||||
return EXIT_FAILURE;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (fread(&b, sizeof(b), 1, pack) != 1 ||
|
if (fread(&b, sizeof(b), 1, pack) != 1 ||
|
||||||
fread(&c, sizeof(c), 1, pack) != 1) {
|
fread(&c, sizeof(c), 1, pack) != 1) {
|
||||||
log_error("Pack file corrupt.");
|
log_error("Pack file corrupt.");
|
||||||
return EXIT_FAILURE;
|
goto fail;
|
||||||
}
|
}
|
||||||
if ((b == 0) && (c == 0))
|
if ((b == 0) && (c == 0))
|
||||||
break;
|
break;
|
||||||
@ -128,10 +130,17 @@ int main_analyze(const char *pack_path)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fclose(pack);
|
||||||
|
|
||||||
fprintf(stdout, "\nHOST: %s", line);
|
fprintf(stdout, "\nHOST: %s", line);
|
||||||
fprintf(stdout, "TYPE: %c\n", a);
|
fprintf(stdout, "TYPE: %c\n", a);
|
||||||
fprintf(stdout, "MISSING: %d\n", missing);
|
fprintf(stdout, "MISSING: %d\n", missing);
|
||||||
fprintf(stdout, "TOTAL: %ld\n", tsize);
|
fprintf(stdout, "TOTAL: %ld\n", tsize);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
|
|
||||||
|
fail:
|
||||||
|
fclose(pack);
|
||||||
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,8 @@ static int replay(const char *root) {
|
|||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!(pack = fopen(pack_fn, "re")))) {
|
pack = fopen(pack_fn, "re");
|
||||||
|
if (!pack) {
|
||||||
if (errno == ENOENT)
|
if (errno == ENOENT)
|
||||||
log_debug("No pack file found.");
|
log_debug("No pack file found.");
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user