On 24/12/20 8:41 am, Emil Velikov wrote: > Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> > ---
This patch does a lot more than just add const annotations. And it looks to me like the extra bit needs justification, so separate patch please. > lib/libalpm/be_local.c | 2 +- > lib/libalpm/be_package.c | 2 +- > lib/libalpm/be_sync.c | 20 ++++++++++++++++++-- > lib/libalpm/package.c | 2 +- > lib/libalpm/package.h | 4 ++-- > 5 files changed, 23 insertions(+), 7 deletions(-) > > diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c > index e73a97bb..9c3c8bb3 100644 > --- a/lib/libalpm/be_local.c > +++ b/lib/libalpm/be_local.c > @@ -326,7 +326,7 @@ static int _cache_force_load(alpm_pkg_t *pkg) > * lazy accessor methods that handle any backend loading and caching > * logic. > */ > -static struct pkg_operations local_pkg_ops = { > +static const struct pkg_operations local_pkg_ops = { > .get_base = _cache_get_base, > .get_desc = _cache_get_desc, > .get_url = _cache_get_url, > diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c > index 4dde7167..f855003a 100644 > --- a/lib/libalpm/be_package.c > +++ b/lib/libalpm/be_package.c > @@ -138,7 +138,7 @@ static int _package_changelog_close(const alpm_pkg_t > UNUSED *pkg, void *fp) > * majority of the default_pkg_ops struct and add only a few operations of > * our own on top. > */ > -static struct pkg_operations *get_file_pkg_ops(void) > +static const struct pkg_operations *get_file_pkg_ops(void) > { > static struct pkg_operations file_pkg_ops; > static int file_pkg_ops_initialized = 0; > diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c > index 225df76d..5356b544 100644 > --- a/lib/libalpm/be_sync.c > +++ b/lib/libalpm/be_sync.c > @@ -281,6 +281,23 @@ static int _sync_get_validation(alpm_pkg_t *pkg) > return pkg->validation; > } > > +/** Package sync operations struct accessor. We implement this as a method > + * rather than a static struct as in be_files because we want to reuse the > + * majority of the default_pkg_ops struct and add only a few operations of > + * our own on top. > + */ > +static const struct pkg_operations *get_sync_pkg_ops(void) > +{ > + static struct pkg_operations sync_pkg_ops; > + static int sync_pkg_ops_initalized = 0; > + if(!sync_pkg_ops_initalized) { > + sync_pkg_ops = default_pkg_ops; > + sync_pkg_ops.get_validation = _sync_get_validation; > + sync_pkg_ops_initalized = 1; > + } > + return &sync_pkg_ops; > +} > + > static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname, > const char **entry_filename, alpm_pkg_t *likely_pkg) > { > @@ -321,8 +338,7 @@ static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, > const char *entryname, > > pkg->origin = ALPM_PKG_FROM_SYNCDB; > pkg->origin_data.db = db; > - pkg->ops = &default_pkg_ops; > - pkg->ops->get_validation = _sync_get_validation; > + pkg->ops = get_sync_pkg_ops(); > pkg->handle = db->handle; > > /* add to the collection */ > diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c > index a4356518..5766c600 100644 > --- a/lib/libalpm/package.c > +++ b/lib/libalpm/package.c > @@ -138,7 +138,7 @@ static int _pkg_force_load(alpm_pkg_t UNUSED *pkg) { > return 0; } > /** The standard package operations struct. Get fields directly from the > * struct itself with no abstraction layer or any type of lazy loading. > */ > -struct pkg_operations default_pkg_ops = { > +const struct pkg_operations default_pkg_ops = { > .get_base = _pkg_get_base, > .get_desc = _pkg_get_desc, > .get_url = _pkg_get_url, > diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h > index c37bd11e..b134ad5a 100644 > --- a/lib/libalpm/package.h > +++ b/lib/libalpm/package.h > @@ -83,7 +83,7 @@ struct pkg_operations { > * The actual definition is in package.c so it can have access to the > * default accessor functions which are defined there. > */ > -extern struct pkg_operations default_pkg_ops; > +extern const struct pkg_operations default_pkg_ops; > > struct __alpm_pkg_t { > unsigned long name_hash; > @@ -121,7 +121,7 @@ struct __alpm_pkg_t { > alpm_list_t *removes; /* in transaction targets only */ > alpm_pkg_t *oldpkg; /* in transaction targets only */ > > - struct pkg_operations *ops; > + const struct pkg_operations *ops; > > alpm_filelist_t files; > >