On Fri, Aug 30, 2024 at 11:12 AM James Carter <jwcart2@xxxxxxxxx> wrote: > > On Mon, Aug 26, 2024 at 12:11 AM Thiébaud Weksteen <tweek@xxxxxxxxxx> wrote: > > > > In commit d95bc8b75539 ("libselinux: migrating hashtab from > > policycoreutils") and commit 4a420508a98c ("libselinux: adapting hashtab > > to libselinux"), the hashtab implementation was copied to libselinux. > > Since the same functions exist in libsepol (e.g., hashtab_create, > > hashtab_destroy, etc), a compilation error is raised when both libraries > > are included statically. > > > > Prefix the libselinux internal implementation with "selinux_". > > > > Signed-off-by: Thiébaud Weksteen <tweek@xxxxxxxxxx> > > Acked-by: James Carter <jwcart2@xxxxxxxxx> > Merged. Jim > > --- > > libselinux/src/hashtab.c | 16 ++++++++-------- > > libselinux/src/hashtab.h | 16 ++++++++-------- > > libselinux/src/label_file.c | 10 +++++----- > > 3 files changed, 21 insertions(+), 21 deletions(-) > > > > diff --git a/libselinux/src/hashtab.c b/libselinux/src/hashtab.c > > index 7452613b..0c6641ed 100644 > > --- a/libselinux/src/hashtab.c > > +++ b/libselinux/src/hashtab.c > > @@ -11,7 +11,7 @@ > > #include <string.h> > > #include "hashtab.h" > > > > -hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h, > > +hashtab_t selinux_hashtab_create(unsigned int (*hash_value) (hashtab_t h, > > const_hashtab_key_t key), > > int (*keycmp) (hashtab_t h, > > const_hashtab_key_t key1, > > @@ -42,7 +42,7 @@ hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h, > > return p; > > } > > > > -int hashtab_insert(hashtab_t h, hashtab_key_t key, hashtab_datum_t datum) > > +int selinux_hashtab_insert(hashtab_t h, hashtab_key_t key, hashtab_datum_t datum) > > { > > unsigned int hvalue; > > hashtab_ptr_t prev, cur, newnode; > > @@ -79,7 +79,7 @@ int hashtab_insert(hashtab_t h, hashtab_key_t key, hashtab_datum_t datum) > > return HASHTAB_SUCCESS; > > } > > > > -int hashtab_remove(hashtab_t h, hashtab_key_t key, > > +int selinux_hashtab_remove(hashtab_t h, hashtab_key_t key, > > void (*destroy) (hashtab_key_t k, > > hashtab_datum_t d, void *args), void *args) > > { > > @@ -112,7 +112,7 @@ int hashtab_remove(hashtab_t h, hashtab_key_t key, > > return HASHTAB_SUCCESS; > > } > > > > -hashtab_datum_t hashtab_search(hashtab_t h, const_hashtab_key_t key) > > +hashtab_datum_t selinux_hashtab_search(hashtab_t h, const_hashtab_key_t key) > > { > > > > unsigned int hvalue; > > @@ -132,7 +132,7 @@ hashtab_datum_t hashtab_search(hashtab_t h, const_hashtab_key_t key) > > return cur->datum; > > } > > > > -void hashtab_destroy(hashtab_t h) > > +void selinux_hashtab_destroy(hashtab_t h) > > { > > unsigned int i; > > hashtab_ptr_t cur, temp; > > @@ -156,7 +156,7 @@ void hashtab_destroy(hashtab_t h) > > free(h); > > } > > > > -void hashtab_destroy_key(hashtab_t h, > > +void selinux_hashtab_destroy_key(hashtab_t h, > > int (*destroy_key) (hashtab_key_t k)) > > { > > unsigned int i; > > @@ -182,7 +182,7 @@ void hashtab_destroy_key(hashtab_t h, > > free(h); > > } > > > > -int hashtab_map(hashtab_t h, > > +int selinux_hashtab_map(hashtab_t h, > > int (*apply) (hashtab_key_t k, > > hashtab_datum_t d, void *args), void *args) > > { > > @@ -205,7 +205,7 @@ int hashtab_map(hashtab_t h, > > return HASHTAB_SUCCESS; > > } > > > > -void hashtab_hash_eval(hashtab_t h, char *tag) > > +void selinux_hashtab_hash_eval(hashtab_t h, char *tag) > > { > > unsigned int i; > > int chain_len, slots_used, max_chain_len; > > diff --git a/libselinux/src/hashtab.h b/libselinux/src/hashtab.h > > index f10fc0af..6fbf5fb4 100644 > > --- a/libselinux/src/hashtab.h > > +++ b/libselinux/src/hashtab.h > > @@ -52,7 +52,7 @@ typedef hashtab_val_t *hashtab_t; > > Returns NULL if insufficient space is available or > > the new hash table otherwise. > > */ > > -extern hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h, > > +extern hashtab_t selinux_hashtab_create(unsigned int (*hash_value) (hashtab_t h, > > const_hashtab_key_t > > key), > > int (*keycmp) (hashtab_t h, > > @@ -66,7 +66,7 @@ extern hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h, > > HASHTAB_PRESENT if there is already an entry with the same key or > > HASHTAB_SUCCESS otherwise. > > */ > > -extern int hashtab_insert(hashtab_t h, hashtab_key_t k, hashtab_datum_t d); > > +extern int selinux_hashtab_insert(hashtab_t h, hashtab_key_t k, hashtab_datum_t d); > > > > /* > > Removes the entry with the specified key from the hash table. > > @@ -76,7 +76,7 @@ extern int hashtab_insert(hashtab_t h, hashtab_key_t k, hashtab_datum_t d); > > Returns HASHTAB_MISSING if no entry has the specified key or > > HASHTAB_SUCCESS otherwise. > > */ > > -extern int hashtab_remove(hashtab_t h, hashtab_key_t k, > > +extern int selinux_hashtab_remove(hashtab_t h, hashtab_key_t k, > > void (*destroy) (hashtab_key_t k, > > hashtab_datum_t d, > > void *args), void *args); > > @@ -87,13 +87,13 @@ extern int hashtab_remove(hashtab_t h, hashtab_key_t k, > > Returns NULL if no entry has the specified key or > > the datum of the entry otherwise. > > */ > > -extern hashtab_datum_t hashtab_search(hashtab_t h, const_hashtab_key_t k); > > +extern hashtab_datum_t selinux_hashtab_search(hashtab_t h, const_hashtab_key_t k); > > > > /* > > Destroys the specified hash table. > > */ > > -extern void hashtab_destroy(hashtab_t h); > > -extern void hashtab_destroy_key(hashtab_t h, > > +extern void selinux_hashtab_destroy(hashtab_t h); > > +extern void selinux_hashtab_destroy_key(hashtab_t h, > > int (*destroy_key) (hashtab_key_t k)); > > > > /* > > @@ -107,11 +107,11 @@ extern void hashtab_destroy_key(hashtab_t h, > > iterating through the hash table and will propagate the error > > return to its caller. > > */ > > -extern int hashtab_map(hashtab_t h, > > +extern int selinux_hashtab_map(hashtab_t h, > > int (*apply) (hashtab_key_t k, > > hashtab_datum_t d, > > void *args), void *args); > > > > -extern void hashtab_hash_eval(hashtab_t h, char *tag); > > +extern void selinux_hashtab_hash_eval(hashtab_t h, char *tag); > > > > #endif > > diff --git a/libselinux/src/label_file.c b/libselinux/src/label_file.c > > index 59c9f2ef..2fad0c93 100644 > > --- a/libselinux/src/label_file.c > > +++ b/libselinux/src/label_file.c > > @@ -111,7 +111,7 @@ static int nodups_specs(struct saved_data *data, const char *path) > > struct chkdups_key *new = NULL; > > unsigned int hashtab_len = (data->nspec / SHRINK_MULTIS) ? data->nspec / SHRINK_MULTIS : 1; > > > > - hashtab_t hash_table = hashtab_create(symhash, symcmp, hashtab_len); > > + hashtab_t hash_table = selinux_hashtab_create(symhash, symcmp, hashtab_len); > > if (!hash_table) { > > rc = -1; > > COMPAT_LOG(SELINUX_ERROR, "%s: hashtab create failed.\n", path); > > @@ -121,18 +121,18 @@ static int nodups_specs(struct saved_data *data, const char *path) > > new = (struct chkdups_key *)malloc(sizeof(struct chkdups_key)); > > if (!new) { > > rc = -1; > > - hashtab_destroy_key(hash_table, destroy_chkdups_key); > > + selinux_hashtab_destroy_key(hash_table, destroy_chkdups_key); > > COMPAT_LOG(SELINUX_ERROR, "%s: hashtab key create failed.\n", path); > > return rc; > > } > > new->regex = spec_arr[ii].regex_str; > > new->mode = spec_arr[ii].mode; > > - ret = hashtab_insert(hash_table, (hashtab_key_t)new, &spec_arr[ii]); > > + ret = selinux_hashtab_insert(hash_table, (hashtab_key_t)new, &spec_arr[ii]); > > if (ret == HASHTAB_SUCCESS) > > continue; > > if (ret == HASHTAB_PRESENT) { > > curr_spec = > > - (struct spec *)hashtab_search(hash_table, (hashtab_key_t)new); > > + (struct spec *)selinux_hashtab_search(hash_table, (hashtab_key_t)new); > > rc = -1; > > errno = EINVAL; > > free(new); > > @@ -161,7 +161,7 @@ static int nodups_specs(struct saved_data *data, const char *path) > > } > > } > > > > - hashtab_destroy_key(hash_table, destroy_chkdups_key); > > + selinux_hashtab_destroy_key(hash_table, destroy_chkdups_key); > > > > return rc; > > } > > -- > > 2.46.0.295.g3b9ea8a38a-goog > >