]> git.ipfire.org Git - pakfire.git/commitdiff
files: Add reference to Pakfire for files and filelists
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Mar 2021 12:13:43 +0000 (12:13 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Mar 2021 12:13:43 +0000 (12:13 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/package.c
src/libpakfire/archive.c
src/libpakfire/file.c
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/file.h
src/libpakfire/include/pakfire/filelist.h
src/libpakfire/package.c
src/libpakfire/packager.c

index c250c6d786109169e2f856b38ddc4788f6178a3c..5476a1ddee9bd25290c848f345bad9986b623663 100644 (file)
@@ -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;
 }
 
index bfc126ecd90d9395d4908aa617bacf00c46b303e..59c641a6649ed6377fd24e60411b64d6cee07438 100644 (file)
@@ -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;
 
index 10030012943943359934618c10118ffdf8622ab7..3348a6193c5af044a847cba1df38c22d00f72e5f 100644 (file)
 
 #include <pakfire/constants.h>
 #include <pakfire/file.h>
+#include <pakfire/pakfire.h>
 #include <pakfire/private.h>
 #include <pakfire/util.h>
 
 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);
 
index 200b8ba86272cbce905bcd2fe8c55d4427012189..3e8b96b893c9078c8719816b6ac521622e89da75 100644 (file)
 
 #include <pakfire/file.h>
 #include <pakfire/filelist.h>
+#include <pakfire/pakfire.h>
 #include <pakfire/private.h>
 #include <pakfire/util.h>
 
 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;
 
index 780bf729c8ffe36f538c63d3b8e267abc88bee79..b9cc973add731d56ca93b93162f019c102f2a7ea 100644 (file)
@@ -28,7 +28,7 @@
 
 #include <pakfire/types.h>
 
-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);
index 6d6bdc329032f890b792beb171142adf3cb9410a..2ff9d472f3935f2058b5ba3576b9acb18c9a493d 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <pakfire/types.h>
 
-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
 
index efd3ba7e107abd25eeb2ee04552b85ab86886c59..f75df80e2dd60c39c842b632f2db94ccc0838d18 100644 (file)
@@ -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;
 
index aca9678cd4258f68b71104d4cd65d4115b1f854e..23f94771418d7072d8078e3731f94506ce0260b1 100644 (file)
@@ -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;