Mercurial > dovecot > core-2.2
changeset 11991:11538925cbbb
lib-sql: Fail if trying to register a duplicate sql driver.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 12 Aug 2010 17:59:03 +0100 |
parents | 4d8ae218af73 |
children | 136ce9b2e039 |
files | src/lib-sql/sql-api.c |
diffstat | 1 files changed, 18 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-sql/sql-api.c Thu Aug 12 17:31:46 2010 +0100 +++ b/src/lib-sql/sql-api.c Thu Aug 12 17:59:03 2010 +0100 @@ -21,8 +21,25 @@ array_free(&sql_drivers); } +static const struct sql_db *sql_driver_lookup(const char *name) +{ + const struct sql_db *const *drivers; + unsigned int i, count; + + drivers = array_get(&sql_drivers, &count); + for (i = 0; i < count; i++) { + if (strcmp(drivers[i]->name, name) == 0) + return drivers[i]; + } + return NULL; +} + void sql_driver_register(const struct sql_db *driver) { + if (sql_driver_lookup(driver->name) != NULL) { + i_fatal("sql_driver_register(%s): Already registered", + driver->name); + } array_append(&sql_drivers, &driver, 1); } @@ -40,19 +57,6 @@ } } -static const struct sql_db *sql_find_driver(const char *name) -{ - const struct sql_db *const *drivers; - unsigned int i, count; - - drivers = array_get(&sql_drivers, &count); - for (i = 0; i < count; i++) { - if (strcmp(drivers[i]->name, name) == 0) - return drivers[i]; - } - return NULL; -} - struct sql_db *sql_init(const char *db_driver, const char *connect_string) { const struct sql_db *driver; @@ -60,7 +64,7 @@ i_assert(connect_string != NULL); - driver = sql_find_driver(db_driver); + driver = sql_driver_lookup(db_driver); if (driver == NULL) i_fatal("Unknown database driver '%s'", db_driver);