From: Michael Tremer Date: Sat, 11 Jan 2025 15:26:15 +0000 (+0000) Subject: archive: Add function to unlink an archive X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c8b8e119b77a70056f18124872838e6fad9f01e9;p=people%2Fric9%2Fpakfire.git archive: Add function to unlink an archive Signed-off-by: Michael Tremer --- 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);