struct _PakfireArchive {
Pakfire pakfire;
char* path;
+ struct stat stat;
// metadata
int format;
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;
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
*/
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");
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"
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;