From dfd49d8fe0bcbc4d794b5a8d56447dd7129aa853 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Wed, 14 Dec 2016 11:20:26 +0100 Subject: [PATCH] afm-db: Search applications case insensitively MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Makes the identifier of the application case insensitive. Being case correct is the fast track. Having the wrong case is not an error but just less efficient. Change-Id: Id18f1cfcf49c9f9f336947ebb08bba335a0adc6a Signed-off-by: José Bollo --- src/afm-db.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/afm-db.c b/src/afm-db.c index 869a0f0..8cf3b37 100644 --- a/src/afm-db.c +++ b/src/afm-db.c @@ -482,10 +482,31 @@ struct json_object *afm_db_application_list(struct afm_db *afdb) */ struct json_object *afm_db_get_application(struct afm_db *afdb, const char *id) { + int i; struct json_object *result; - if (!afm_db_ensure_applications(afdb) && json_object_object_get_ex( - afdb->applications.direct, id, &result)) + + if (afm_db_ensure_applications(afdb)) + return NULL; + + /* search case sensitively */ + if (json_object_object_get_ex( afdb->applications.direct, id, &result)) return json_object_get(result); + + /* fallback to a case insensitive search */ + i = json_object_array_length(afdb->applications.pubarr); + while (i) { + result = json_object_array_get_idx(afdb->applications.pubarr, --i); + if (result + && json_object_object_get_ex(result, "id", &result) + && !strcasecmp(id, json_object_get_string(result))) { + if (json_object_object_get_ex( afdb->applications.direct, + json_object_get_string(result), + &result)) + return json_object_get(result); + else + return NULL; + } + } return NULL; } -- 2.16.6