From: Michael Tremer Date: Mon, 10 Jun 2019 22:54:13 +0000 (+0100) Subject: libpakfire: Raise and log better errors when a package could not be read X-Git-Tag: 0.9.28~1285^2~949 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=91a01d2b0bb4763d0ff48388156e216a1f952ce6;p=pakfire.git libpakfire: Raise and log better errors when a package could not be read Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/archive.c b/src/_pakfire/archive.c index 52bb3fdf6..7e3b72002 100644 --- a/src/_pakfire/archive.c +++ b/src/_pakfire/archive.c @@ -52,8 +52,10 @@ static int Archive_init(ArchiveObject* self, PyObject* args, PyObject* kwds) { return -1; self->archive = pakfire_archive_open(pakfire->pakfire, filename); - if (!self->archive) + if (!self->archive) { + PyErr_SetFromErrno(PyExc_OSError); return -1; + } return 0; } diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 56c1a3725..473676a16 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -100,6 +101,10 @@ static int archive_open(PakfireArchive archive, struct archive** a) { return 0; } + // Log error message + const char* error = archive_error_string(*a); + DEBUG(archive->pakfire, "Could not open archive: %s\n", error); + archive_read_free(*a); *a = NULL; @@ -631,6 +636,11 @@ PAKFIRE_EXPORT PakfireArchive pakfire_archive_open(Pakfire pakfire, const char* // Stat the file and store the result int r = stat(archive->path, &archive->stat); if (r) { + pakfire_errno = errno; + + ERROR(pakfire, "Could not stat %s: %s\n", + archive->path, strerror(pakfire_errno)); + goto error; } @@ -638,14 +648,16 @@ PAKFIRE_EXPORT PakfireArchive pakfire_archive_open(Pakfire pakfire, const char* struct archive* a; r = archive_open(archive, &a); if (r) { - pakfire_errno = r; + pakfire_errno = PAKFIRE_E_PKG_INVALID; goto error; } // Parse all entries in the archive. r = pakfire_archive_read_metadata(archive, a); if (r) { - pakfire_errno = r; + ERROR(pakfire, "Could not read metadata from %s\n", archive->path); + + pakfire_errno = PAKFIRE_E_PKG_INVALID; goto error; }