]> git.ipfire.org Git - people/ric9/pakfire.git/commitdiff
archive: Add function to unlink an archive
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 11 Jan 2025 15:26:15 +0000 (15:26 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 11 Jan 2025 15:26:15 +0000 (15:26 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/archive.c
src/pakfire/archive.h

index cebd995dd8b38a7961dcfd2e6ea55a137e6abbaf..602f195d209be54f6dd3c6af6563e439905c3225 100644 (file)
@@ -997,6 +997,36 @@ ERROR:
        return NULL;
 }
 
+/*
+       Unlinks the archive.
+
+       We will keep the archive open so it can still be used.
+*/
+int pakfire_archive_unlink(struct pakfire_archive* archive) {
+       int r;
+
+       // We cannot do this if we don't have a path
+       if (!*archive->path)
+               return -ENOTSUP;
+
+       DEBUG(archive->ctx, "Unlinking %s\n", archive->path);
+
+       // Unlink the file
+       r = unlink(archive->path);
+       if (r < 0) {
+               switch (errno) {
+                       case ENOENT:
+                               break;
+
+                       default:
+                               ERROR(archive->ctx, "Could not unlink %s: %m\n", archive->path);
+                               return -errno;
+               }
+       }
+
+       return 0;
+}
+
 int pakfire_archive_copy(struct pakfire_archive* archive, const char* path) {
        FILE* f = NULL;
        int r;
index a795f1d9e04571a30ba34c902bbfa3b22edefa24..578342e4a5826f8906f1f2a81250542f6cbb2b4c 100644 (file)
@@ -89,6 +89,7 @@ enum pakfire_archive_walk_codes {
 int pakfire_archive_walk_payload(struct pakfire_archive* archive,
        pakfire_archive_walk_callback callback, void* data);
 
+int pakfire_archive_unlink(struct pakfire_archive* archive);
 int pakfire_archive_copy(struct pakfire_archive* archive, const char* path);
 int pakfire_archive_link_or_copy(struct pakfire_archive* archive, const char* path);