From: Michael Tremer Date: Wed, 1 Nov 2017 21:25:13 +0000 (+0100) Subject: Better error messagen if SOLV file could not be parsed X-Git-Tag: 0.9.28~1285^2~1329 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1230da7d92cf3303aec4fbe5a772a204cf6eb821;p=pakfire.git Better error messagen if SOLV file could not be parsed Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/repo.c b/src/_pakfire/repo.c index c9107744f..038e79d8e 100644 --- a/src/_pakfire/repo.c +++ b/src/_pakfire/repo.c @@ -163,12 +163,25 @@ static PyObject* Repo_read_solv(RepoObject* self, PyObject* args) { Py_RETURN_NONE; break; + case PAKFIRE_E_SOLV_NOT_SOLV: + PyErr_Format(PyExc_ValueError, "File not in SOLV format: %s", filename); + break; + + case PAKFIRE_E_SOLV_UNSUPPORTED: + PyErr_Format(PyExc_ValueError, "File in an unsupported version" + " of the SOLV format: %s", filename); + break; + + case PAKFIRE_E_SOLV_CORRUPTED: + PyErr_Format(PyExc_ValueError, "SOLV file is corrupted: %s", filename); + break; + case PAKFIRE_E_IO: - PyErr_Format(PyExc_IOError, "Could not read file %s", filename); + PyErr_Format(PyExc_IOError, "Could not read file %s: %s", filename, strerror(errno)); break; default: - PyErr_Format(PyExc_RuntimeError, "pakfire_repo_read() failed: %d", ret); + PyErr_Format(PyExc_RuntimeError, "pakfire_repo_read() failed: %s", ret); break; } diff --git a/src/libpakfire/include/pakfire/errno.h b/src/libpakfire/include/pakfire/errno.h index 4ac4111a8..dbb5ce714 100644 --- a/src/libpakfire/include/pakfire/errno.h +++ b/src/libpakfire/include/pakfire/errno.h @@ -30,6 +30,9 @@ enum _pakfire_errors { PAKFIRE_E_SELECTOR, PAKFIRE_E_PKG_INVALID, // when a package is not in the pakfire format PAKFIRE_E_EOF, + PAKFIRE_E_SOLV_NOT_SOLV, // SOLV file in not in SOLV format + PAKFIRE_E_SOLV_UNSUPPORTED, // SOLV file is in an unsupported format + PAKFIRE_E_SOLV_CORRUPTED, // SOLV file is corrupted }; extern __thread int pakfire_errno; diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index ab6a7a086..5d36eddfa 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -325,6 +325,31 @@ int pakfire_repo_read_solv_fp(PakfireRepo repo, FILE *f, int flags) { int ret = repo_add_solv(repo->repo, f, flags); + switch (ret) { + // Everything OK + case 0: + break; + + // Not SOLV format + case 1: + return PAKFIRE_E_SOLV_NOT_SOLV; + + // Unsupported version + case 2: + return PAKFIRE_E_SOLV_UNSUPPORTED; + + // End of file + case 3: + return PAKFIRE_E_EOF; + + // Corrupted + case 4: + case 5: + case 6: + default: + return PAKFIRE_E_SOLV_CORRUPTED; + } + repo->pool->provides_ready = 0; return ret;