From: Michael Tremer Date: Fri, 9 Sep 2022 14:39:06 +0000 (+0000) Subject: archive: Rewind before copy X-Git-Tag: 0.9.28~318 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b203404833921809a68ba8406ba3a2e53e839bf6;p=pakfire.git archive: Rewind before copy Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index ffca5304f..61c92b353 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -823,6 +823,9 @@ int pakfire_archive_copy(struct pakfire_archive* archive, const char* path) { DEBUG(archive->pakfire, "Copying %s to %s...\n", archive->path, path); + // Ensure we copy from the very beginning + rewind(archive->f); + // Open destination file FILE* f = fopen(path, "w"); if (!f) @@ -832,8 +835,11 @@ int pakfire_archive_copy(struct pakfire_archive* archive, const char* path) { // Copy everything ssize_t bytes_written = sendfile(fileno(f), fileno(archive->f), NULL, size); - if (bytes_written != size) + if (bytes_written < size) { + ERROR(archive->pakfire, "Could not copy archive (%zu byte(s) written): %m\n", + bytes_written); goto ERROR; + } // Success r = 0; @@ -845,8 +851,6 @@ ERROR: if (r) unlink(path); - rewind(archive->f); - return r; }