]> git.ipfire.org Git - pakfire.git/commitdiff
Better error messagen if SOLV file could not be parsed
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Nov 2017 21:25:13 +0000 (22:25 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Nov 2017 21:25:13 +0000 (22:25 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/repo.c
src/libpakfire/include/pakfire/errno.h
src/libpakfire/repo.c

index c9107744fad1c9274514ee1c70ee700cc8986a2b..038e79d8ef33045e27adf8b3cecdcd933cdce16f 100644 (file)
@@ -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;
        }
 
index 4ac4111a87a3d518f258372013d1cf864aca4a2a..dbb5ce71463409cf2994b86dfdb65a9deb0d159a 100644 (file)
@@ -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;
index ab6a7a086c3b8fd27258909f2d57caa81848e409..5d36eddfa2c4fb344f6cb5a3eedb1df1d9219a47 100644 (file)
@@ -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;