From: Michael Tremer Date: Sat, 8 Jun 2019 12:46:55 +0000 (+0100) Subject: libpakfire: Import package size X-Git-Tag: 0.9.28~1285^2~973 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=213d0220daad24d94e564db7d6f1f00681bc42d1;p=pakfire.git libpakfire: Import package size Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 257dd2915..d33d1149c 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -58,6 +58,7 @@ typedef struct archive_checksum { struct _PakfireArchive { Pakfire pakfire; char* path; + struct stat stat; // metadata int format; @@ -639,9 +640,15 @@ PAKFIRE_EXPORT PakfireArchive pakfire_archive_open(Pakfire pakfire, const char* PakfireArchive archive = pakfire_archive_create(pakfire); archive->path = pakfire_strdup(path); + // Stat the file and store the result + int r = stat(archive->path, &archive->stat); + if (r) { + goto error; + } + // Open the archive file for reading. struct archive* a; - int r = archive_open(archive, &a); + r = archive_open(archive, &a); if (r) { pakfire_errno = r; goto error; @@ -1082,6 +1089,10 @@ PAKFIRE_EXPORT const char* pakfire_archive_verify_strerror(pakfire_archive_verif return NULL; } +PAKFIRE_EXPORT size_t pakfire_archive_get_size(PakfireArchive archive) { + return archive->stat.st_size; +} + /* Copy all metadata from this archive to the package object */ @@ -1161,7 +1172,8 @@ PAKFIRE_EXPORT PakfirePackage pakfire_archive_make_package(PakfireArchive archiv pakfire_free(description); } - // XXX Get package size + // Get package size + pakfire_package_set_downloadsize(pkg, pakfire_archive_get_size(archive)); // Get install size char* size = pakfire_archive_get(archive, "package.size"); diff --git a/src/libpakfire/include/pakfire/archive.h b/src/libpakfire/include/pakfire/archive.h index 600ce2f13..1614bbb2f 100644 --- a/src/libpakfire/include/pakfire/archive.h +++ b/src/libpakfire/include/pakfire/archive.h @@ -67,6 +67,7 @@ PakfireArchiveSignature pakfire_archive_signature_ref(PakfireArchiveSignature si void pakfire_archive_signature_unref(PakfireArchiveSignature signature); const char* pakfire_archive_signature_get_data(PakfireArchiveSignature signature); +size_t pakfire_archive_get_size(PakfireArchive archive); PakfirePackage pakfire_archive_make_package(PakfireArchive archive, PakfireRepo repo); #define PAKFIRE_ARCHIVE_FN_CHECKSUMS "chksums" diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 4ede202a1..d2d0aa655 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -50,6 +50,7 @@ global: pakfire_archive_get_format; pakfire_archive_get_path; pakfire_archive_get_signatures; + pakfire_archive_get_size; pakfire_archive_open; pakfire_archive_read; pakfire_archive_ref;