diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/db.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c index 528b04bb..2069a7b5 100644 --- a/lib/libalpm/db.c +++ b/lib/libalpm/db.c @@ -46,6 +46,8 @@ alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle, const char *treename, alpm_siglevel_t level) { + alpm_list_t *i; + /* Sanity checks */ CHECK_HANDLE(handle, return NULL); ASSERT(treename != NULL && strlen(treename) != 0, @@ -53,6 +55,17 @@ alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle, /* Do not register a database if a transaction is on-going */ ASSERT(handle->trans == NULL, RET_ERR(handle, ALPM_ERR_TRANS_NOT_NULL, NULL)); + /* ensure database name is unique */ + if(strcmp(treename, "local") == 0) { + RET_ERR(handle, ALPM_ERR_DB_NOT_NULL, NULL); + } + for(i = handle->dbs_sync; i; i = i->next) { + alpm_db_t *d = i->data; + if(strcmp(treename, d->treename) == 0) { + RET_ERR(handle, ALPM_ERR_DB_NOT_NULL, NULL); + } + } + return _alpm_db_register_sync(handle, treename, level); } |