]> git.ipfire.org Git - location/libloc.git/commitdiff
database: country: Return better error codes
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 Aug 2022 09:35:54 +0000 (09:35 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 Aug 2022 09:35:54 +0000 (09:35 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/database.c
src/python/database.c

index bc53f4159b11348475115b6c3c335a941ba0a908..374da576739c717b700d8bc4bc5a827456910ff9 100644 (file)
@@ -954,6 +954,12 @@ LOC_EXPORT int loc_database_get_country(struct loc_database* db,
        off_t lo = 0;
        off_t hi = db->country_objects.count - 1;
 
+       // Check if the country code is valid
+       if (!loc_country_code_is_valid(code)) {
+               errno = EINVAL;
+               return 1;
+       }
+
 #ifdef ENABLE_DEBUG
        // Save start time
        clock_t start = clock();
@@ -996,7 +1002,7 @@ LOC_EXPORT int loc_database_get_country(struct loc_database* db,
        // Nothing found
        *country = NULL;
 
-       return 1;
+       return 0;
 }
 
 // Enumerator
index 250750d5cf55c755cc41d69d0d6b027bf36cdd8b..d6ee4d02d0ed1d35fcf1ccc4244d25763e222cd3 100644 (file)
@@ -166,17 +166,32 @@ static PyObject* Database_get_as(DatabaseObject* self, PyObject* args) {
 }
 
 static PyObject* Database_get_country(DatabaseObject* self, PyObject* args) {
+       struct loc_country* country = NULL;
        const char* country_code = NULL;
 
        if (!PyArg_ParseTuple(args, "s", &country_code))
                return NULL;
 
-       struct loc_country* country;
+       // Fetch the country
        int r = loc_database_get_country(self->db, &country, country_code);
        if (r) {
-               Py_RETURN_NONE;
+               switch (errno) {
+                       case EINVAL:
+                               PyErr_SetString(PyExc_ValueError, "Invalid country code");
+                               break;
+
+                       default:
+                               PyErr_SetFromErrno(PyExc_OSError);
+                               break;
+               }
+
+               return NULL;
        }
 
+       // No result
+       if (!country)
+               Py_RETURN_NONE;
+
        PyObject* obj = new_country(&CountryType, country);
        loc_country_unref(country);