db.c: require unique database names

Allowing multiple databases with the same name causes conflicts as they
both point to the same database file but may use different servers,
usages, or siglevels.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Andrew Gregory 2013-11-30 20:45:02 -05:00 committed by Allan McRae
parent 76a05e94c1
commit 841c60f2b3
2 changed files with 18 additions and 4 deletions

View File

@ -202,10 +202,11 @@ Repository Sections
------------------- -------------------
Each repository section defines a section name and at least one location where Each repository section defines a section name and at least one location where
the packages can be found. The section name is defined by the string within the packages can be found. The section name is defined by the string within
square brackets (the two above are 'current' and 'custom'). Locations are square brackets (the two above are 'core' and 'custom'). Repository names
defined with the 'Server' directive and follow a URL naming structure. If you must be unique and the name 'local' is reserved for the database of installed
want to use a local directory, you can specify the full path with a ``file://'' packages. Locations are defined with the 'Server' directive and follow a URL
prefix, as shown above. naming structure. If you want to use a local directory, you can specify the
full path with a ``file://'' prefix, as shown above.
A common way to define DB locations utilizes the 'Include' directive. For each A common way to define DB locations utilizes the 'Include' directive. For each
repository defined in the configuration file, a single 'Include' directive can repository defined in the configuration file, a single 'Include' directive can

View File

@ -46,6 +46,8 @@
alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle, alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle,
const char *treename, alpm_siglevel_t level) const char *treename, alpm_siglevel_t level)
{ {
alpm_list_t *i;
/* Sanity checks */ /* Sanity checks */
CHECK_HANDLE(handle, return NULL); CHECK_HANDLE(handle, return NULL);
ASSERT(treename != NULL && strlen(treename) != 0, 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 */ /* Do not register a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(handle, ALPM_ERR_TRANS_NOT_NULL, NULL)); 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); return _alpm_db_register_sync(handle, treename, level);
} }