From c8b8e119b77a70056f18124872838e6fad9f01e9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 11 Jan 2025 15:26:15 +0000 Subject: [PATCH] archive: Add function to unlink an archive Signed-off-by: Michael Tremer --- src/pakfire/archive.c | 30 ++++++++++++++++++++++++++++++ src/pakfire/archive.h | 1 + 2 files changed, 31 insertions(+) diff --git a/src/pakfire/archive.c b/src/pakfire/archive.c index cebd995dd..602f195d2 100644 --- a/src/pakfire/archive.c +++ b/src/pakfire/archive.c @@ -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; diff --git a/src/pakfire/archive.h b/src/pakfire/archive.h index a795f1d9e..578342e4a 100644 --- a/src/pakfire/archive.h +++ b/src/pakfire/archive.h @@ -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); -- 2.47.3