]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
filelists: Implement removing files from a filelist
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Feb 2023 16:29:38 +0000 (16:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Feb 2023 16:29:38 +0000 (16:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/filelist.h

index 82df96fd2cebff8dc9683ad5fef9e64fb7aa401e..6ca61198ebaed0a11168b5f04839dc9f16ce66c3 100644 (file)
@@ -174,8 +174,36 @@ PAKFIRE_EXPORT int pakfire_filelist_append(struct pakfire_filelist* list, struct
        return 0;
 }
 
-PAKFIRE_EXPORT void pakfire_filelist_sort(struct pakfire_filelist* list) {
-       return; // XXX NOOP - filelists are now always sorted
+static int pakfire_filelist_remove(struct pakfire_filelist* list, struct pakfire_file* file) {
+       struct pakfire_filelist_element* element = NULL;
+
+       TAILQ_FOREACH(element, &list->files, nodes) {
+               if (element->file == file) {
+                       // Remove the element from the list
+                       TAILQ_REMOVE(&list->files, element, nodes);
+
+                       // Free the element
+                       pakfire_file_unref(element->file);
+                       free(element);
+
+                       return 0;
+               }
+       }
+
+       return 0;
+}
+
+static int __pakfire_filelist_remove_one(
+               struct pakfire* pakfire, struct pakfire_file* file, void* data) {
+       struct pakfire_filelist* list = (struct pakfire_filelist*)data;
+
+       // Remove the file from the given filelist
+       return pakfire_filelist_remove(list, file);
+}
+
+int pakfire_filelist_remove_all(
+               struct pakfire_filelist* list, struct pakfire_filelist* removees) {
+       return pakfire_filelist_walk(removees, __pakfire_filelist_remove_one, list);
 }
 
 // Returns true if s contains globbing characters
index a79c73ad080f8ac49d3301a99a9db857f64e3c22..9b047ffbdb0650f6c4e852072668df6be0e6b798 100644 (file)
@@ -43,6 +43,9 @@ int pakfire_filelist_append(struct pakfire_filelist* list, struct pakfire_file*
 
 size_t pakfire_filelist_total_size(struct pakfire_filelist* list);
 
+int pakfire_filelist_remove_all(struct pakfire_filelist* list,
+       struct pakfire_filelist* removees);
+
 int pakfire_filelist_scan(struct pakfire_filelist* list, const char* root,
                const char** includes, const char** excludes);