From: Michael Tremer Date: Wed, 31 Aug 2022 15:49:55 +0000 (+0000) Subject: archive: Call stat() on open X-Git-Tag: 0.9.28~348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8e7ae4a2dbd976aee9fe23aa9e387b148a89950;p=pakfire.git archive: Call stat() on open Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 842754ad6..a8ccfc5f9 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -55,6 +55,8 @@ struct pakfire_archive { char path[PATH_MAX]; FILE* f; + struct stat stat; + struct pakfire_package* package; // metadata @@ -564,6 +566,7 @@ ERROR: static int pakfire_archive_try_open(struct pakfire_archive* archive, const char* path) { struct archive* a = NULL; + int r; if (!path) return EINVAL; @@ -578,8 +581,15 @@ static int pakfire_archive_try_open(struct pakfire_archive* archive, const char* if (!archive->f) return 1; + // Call stat() on f + r = fstat(fileno(archive->f), &archive->stat); + if (r) { + ERROR(archive->pakfire, "Could not stat archive: %m\n"); + goto ERROR; + } + // Open the archive file for reading. - int r = open_archive(archive, &a); + r = open_archive(archive, &a); if (r) goto ERROR; @@ -848,16 +858,7 @@ PAKFIRE_EXPORT int pakfire_archive_verify(struct pakfire_archive* archive, int* } PAKFIRE_EXPORT ssize_t pakfire_archive_get_size(struct pakfire_archive* archive) { - struct stat buf; - - int r = fstat(fileno(archive->f), &buf); - if (r) { - ERROR(archive->pakfire, "Could not stat %s: %m\n", archive->path); - - return -1; - } - - return buf.st_size; + return archive->stat.st_size; } int pakfire_archive_check_digest(struct pakfire_archive* archive,