From: Michael Tremer Date: Mon, 8 Mar 2021 12:13:43 +0000 (+0000) Subject: files: Add reference to Pakfire for files and filelists X-Git-Tag: 0.9.28~1285^2~604 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=883b3be9ceee6a097b52fc0bbc3d92c50b251fe7;p=pakfire.git files: Add reference to Pakfire for files and filelists Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/package.c b/src/_pakfire/package.c index c250c6d78..5476a1dde 100644 --- a/src/_pakfire/package.c +++ b/src/_pakfire/package.c @@ -757,11 +757,14 @@ static int Package_set_filelist(PackageObject* self, PyObject* value) { return -1; } + Pakfire pakfire = pakfire_package_get_pakfire(self->package); + // Create a new filelist PakfireFilelist filelist; - int r = pakfire_filelist_create(&filelist); + int r = pakfire_filelist_create(&filelist, pakfire); if (r) { + pakfire_unref(pakfire); errno = -r; PyErr_SetFromErrno(PyExc_OSError); @@ -775,6 +778,7 @@ static int Package_set_filelist(PackageObject* self, PyObject* value) { if (!PyUnicode_Check(item)) { Py_DECREF(item); pakfire_filelist_unref(filelist); + pakfire_unref(pakfire); PyErr_SetString(PyExc_AttributeError, "Expected a string"); return -1; @@ -786,11 +790,12 @@ static int Package_set_filelist(PackageObject* self, PyObject* value) { // Create a new file PakfireFile file; - r = pakfire_file_create(&file); + r = pakfire_file_create(&file, pakfire); if (r) { errno = -r; PyErr_SetFromErrno(PyExc_OSError); pakfire_filelist_unref(filelist); + pakfire_unref(pakfire); return -1; } @@ -807,12 +812,16 @@ static int Package_set_filelist(PackageObject* self, PyObject* value) { pakfire_filelist_unref(filelist); if (r) { + pakfire_unref(pakfire); + errno = -r; PyErr_SetFromErrno(PyExc_OSError); return -1; } + pakfire_unref(pakfire); + return 0; } diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index bfc126ecd..59c641a66 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -438,7 +438,8 @@ static int pakfire_archive_parse_entry_filelist(PakfireArchive archive, data[data_size] = '\0'; if (data_size > 0) { - r = pakfire_filelist_create_from_file(&archive->filelist, data, archive->format); + r = pakfire_filelist_create_from_file(&archive->filelist, archive->pakfire, + data, archive->format); } free(data); @@ -775,7 +776,7 @@ static int archive_extract(PakfireArchive archive, struct archive* a, const char } // Create a new file object - r = pakfire_file_create(&file); + r = pakfire_file_create(&file, archive->pakfire); if (r) return r; diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index 100300129..3348a6193 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -33,10 +33,12 @@ #include #include +#include #include #include struct _PakfireFile { + Pakfire pakfire; int nrefs; char name[PATH_MAX]; @@ -57,11 +59,12 @@ struct _PakfireFile { //int is_datafile; }; -PAKFIRE_EXPORT int pakfire_file_create(PakfireFile* file) { +PAKFIRE_EXPORT int pakfire_file_create(PakfireFile* file, Pakfire pakfire) { PakfireFile f = calloc(1, sizeof(*f)); if (!f) return -ENOMEM; + f->pakfire = pakfire_ref(pakfire); f->nrefs = 1; *file = f; @@ -139,6 +142,8 @@ int pakfire_file_copy_archive_entry(PakfireFile file, struct archive_entry* entr } static void pakfire_file_free(PakfireFile file) { + pakfire_unref(file->pakfire); + if (file->chksum) free(file->chksum); diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index 200b8ba86..3e8b96b89 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -24,10 +24,12 @@ #include #include +#include #include #include struct _PakfireFilelist { + Pakfire pakfire; int nrefs; PakfireFile* elements; @@ -48,11 +50,12 @@ static int pakfire_filelist_grow(PakfireFilelist list, size_t size) { return 0; } -PAKFIRE_EXPORT int pakfire_filelist_create(PakfireFilelist* list) { +PAKFIRE_EXPORT int pakfire_filelist_create(PakfireFilelist* list, Pakfire pakfire) { PakfireFilelist l = calloc(1, sizeof(*l)); if (!l) return -ENOMEM; + l->pakfire = pakfire_ref(pakfire); l->nrefs = 1; *list = l; @@ -61,6 +64,7 @@ PAKFIRE_EXPORT int pakfire_filelist_create(PakfireFilelist* list) { static void pakfire_filelist_free(PakfireFilelist list) { pakfire_filelist_clear(list); + pakfire_unref(list->pakfire); free(list); } @@ -138,11 +142,12 @@ PAKFIRE_EXPORT void pakfire_filelist_sort(PakfireFilelist list) { qsort(list->elements, list->size, sizeof(*list->elements), __sort); } -static int pakfire_filelist_parse_line(PakfireFile* file, char* line, unsigned int format) { +static int pakfire_filelist_parse_line(PakfireFile* file, Pakfire pakfire, + char* line, unsigned int format) { unsigned int i = 0; // Allocate file - int r = pakfire_file_create(file); + int r = pakfire_file_create(file, pakfire); if (r) return r; @@ -261,8 +266,9 @@ static int pakfire_filelist_parse_line(PakfireFile* file, char* line, unsigned i return 0; } -int pakfire_filelist_create_from_file(PakfireFilelist* list, const char* data, unsigned int format) { - int r = pakfire_filelist_create(list); +int pakfire_filelist_create_from_file(PakfireFilelist* list, Pakfire pakfire, + const char* data, unsigned int format) { + int r = pakfire_filelist_create(list, pakfire); if (r) return r; @@ -280,7 +286,7 @@ int pakfire_filelist_create_from_file(PakfireFilelist* list, const char* data, u if (*line == '\0') break; - int r = pakfire_filelist_parse_line(&file, line, format); + int r = pakfire_filelist_parse_line(&file, pakfire, line, format); if (r) goto ERROR; diff --git a/src/libpakfire/include/pakfire/file.h b/src/libpakfire/include/pakfire/file.h index 780bf729c..b9cc973ad 100644 --- a/src/libpakfire/include/pakfire/file.h +++ b/src/libpakfire/include/pakfire/file.h @@ -28,7 +28,7 @@ #include -int pakfire_file_create(PakfireFile* file); +int pakfire_file_create(PakfireFile* file, Pakfire pakfire); PakfireFile pakfire_file_ref(PakfireFile file); PakfireFile pakfire_file_unref(PakfireFile file); diff --git a/src/libpakfire/include/pakfire/filelist.h b/src/libpakfire/include/pakfire/filelist.h index 6d6bdc329..2ff9d472f 100644 --- a/src/libpakfire/include/pakfire/filelist.h +++ b/src/libpakfire/include/pakfire/filelist.h @@ -23,7 +23,7 @@ #include -int pakfire_filelist_create(PakfireFilelist* list); +int pakfire_filelist_create(PakfireFilelist* list, Pakfire pakfire); PakfireFilelist pakfire_filelist_ref(PakfireFilelist list); PakfireFilelist pakfire_filelist_unref(PakfireFilelist list); @@ -39,7 +39,8 @@ void pakfire_filelist_sort(PakfireFilelist list); #ifdef PAKFIRE_PRIVATE -int pakfire_filelist_create_from_file(PakfireFilelist* list, const char* data, unsigned int format); +int pakfire_filelist_create_from_file(PakfireFilelist* list, Pakfire pakfire, + const char* data, unsigned int format); #endif diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index efd3ba7e1..f75df80e2 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -960,7 +960,7 @@ static int pakfire_package_fetch_legacy_filelist(PakfirePackage pkg, PakfireFile if (found_marker) { PakfireFile file; - int r = pakfire_file_create(&file); + int r = pakfire_file_create(&file, pkg->pakfire); if (r) return r; @@ -998,7 +998,7 @@ static int pakfire_package_fetch_filelist(PakfirePackage pkg, PakfireFilelist fi while (dataiterator_step(&di)) { PakfireFile file; - r = pakfire_file_create(&file); + r = pakfire_file_create(&file, pkg->pakfire); if (r) return r; @@ -1027,7 +1027,7 @@ static int pakfire_package_fetch_filelist(PakfirePackage pkg, PakfireFilelist fi PAKFIRE_EXPORT PakfireFilelist pakfire_package_get_filelist(PakfirePackage pkg) { PakfireFilelist filelist; - int r = pakfire_filelist_create(&filelist); + int r = pakfire_filelist_create(&filelist, pkg->pakfire); if (r) return NULL; diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index aca9678cd..23f947714 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -143,7 +143,7 @@ PAKFIRE_EXPORT int pakfire_packager_create(struct pakfire_packager** packager, p->pkg = pakfire_package_ref(pkg); // Create a new filelist - int r = pakfire_filelist_create(&p->filelist); + int r = pakfire_filelist_create(&p->filelist, p->pakfire); if (r) goto ERROR; @@ -457,7 +457,7 @@ PAKFIRE_EXPORT int pakfire_packager_add(struct pakfire_packager* packager, // Create a file PakfireFile file; - r = pakfire_file_create(&file); + r = pakfire_file_create(&file, packager->pakfire); if (r) return r;