diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 33707dd3..b702c030 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -382,6 +382,14 @@ int alpm_db_unregister_all(alpm_handle_t *handle); */ const char *alpm_db_get_name(const alpm_db_t *db); +/** Check the validity of a database. + * This is most useful for sync databases and verifying signature status. + * If invalid, the handle error code will be set accordingly. + * @param db pointer to the package database + * @return 0 if valid, -1 if invalid (pm_errno is set accordingly) + */ +int alpm_db_get_valid(alpm_db_t *db); + /** @name Accessors to the list of servers for a database. * @{ */ diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c index c10c9e3c..63a95bb8 100644 --- a/lib/libalpm/be_local.c +++ b/lib/libalpm/be_local.c @@ -915,6 +915,7 @@ int _alpm_local_db_remove(alpm_db_t *db, alpm_pkg_t *info) } struct db_operations local_db_ops = { + .validate = local_db_validate, .populate = local_db_populate, .unregister = _alpm_db_unregister, }; diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index 9d3646c8..cf32257f 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -580,6 +580,7 @@ error: } struct db_operations sync_db_ops = { + .validate = sync_db_validate, .populate = sync_db_populate, .unregister = _alpm_db_unregister, }; diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c index f6f810c0..b6a436f1 100644 --- a/lib/libalpm/db.c +++ b/lib/libalpm/db.c @@ -219,6 +219,14 @@ const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db) return db->treename; } +/** Check the validity of a database. */ +int SYMEXPORT alpm_db_get_valid(alpm_db_t *db) +{ + ASSERT(db != NULL, return -1); + db->handle->pm_errno = 0; + return db->ops->validate(db); +} + /** Get a package entry from a package database. */ alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name) { diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index 7dce006f..0f00f683 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -51,6 +51,7 @@ enum _alpm_dbstatus_t { }; struct db_operations { + int (*validate) (alpm_db_t *); int (*populate) (alpm_db_t *); void (*unregister) (alpm_db_t *); };