@@ -4027,53 +4027,53 @@ exit:
return rc;
}
-static unsigned int filename_trans_hash(hashtab_t h, hashtab_key_t key)
+static unsigned int filename_trans_hash(hashtab_t h, const_hashtab_key_t key)
{
- filename_trans_t *k = (filename_trans_t *)key;
+ const filename_trans_t *k = (const filename_trans_t *)key;
return ((k->tclass + (k->ttype << 2) +
(k->stype << 9)) & (h->size - 1));
}
static int filename_trans_compare(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- filename_trans_t *a = (filename_trans_t *)key1;
- filename_trans_t *b = (filename_trans_t *)key2;
+ const filename_trans_t *a = (const filename_trans_t *)key1;
+ const filename_trans_t *b = (const filename_trans_t *)key2;
return a->stype != b->stype || a->ttype != b->ttype || a->tclass != b->tclass || strcmp(a->name, b->name);
}
-static unsigned int range_trans_hash(hashtab_t h, hashtab_key_t key)
+static unsigned int range_trans_hash(hashtab_t h, const_hashtab_key_t key)
{
- range_trans_t *k = (range_trans_t *)key;
+ const range_trans_t *k = (const range_trans_t *)key;
return ((k->target_class + (k->target_type << 2) +
(k->source_type << 5)) & (h->size - 1));
}
static int range_trans_compare(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- range_trans_t *a = (range_trans_t *)key1;
- range_trans_t *b = (range_trans_t *)key2;
+ const range_trans_t *a = (const range_trans_t *)key1;
+ const range_trans_t *b = (const range_trans_t *)key2;
return a->source_type != b->source_type || a->target_type != b->target_type || a->target_class != b->target_class;
}
-static unsigned int role_trans_hash(hashtab_t h, hashtab_key_t key)
+static unsigned int role_trans_hash(hashtab_t h, const_hashtab_key_t key)
{
- role_trans_t *k = (role_trans_t *)key;
+ const role_trans_t *k = (const role_trans_t *)key;
return ((k->role + (k->type << 2) +
(k->tclass << 5)) & (h->size - 1));
}
static int role_trans_compare(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- role_trans_t *a = (role_trans_t *)key1;
- role_trans_t *b = (role_trans_t *)key2;
+ const role_trans_t *a = (const role_trans_t *)key1;
+ const role_trans_t *b = (const role_trans_t *)key2;
return a->role != b->role || a->type != b->type || a->tclass != b->tclass;
}
@@ -4081,9 +4081,9 @@ static int role_trans_compare(hashtab_t h
/* Based on MurmurHash3, written by Austin Appleby and placed in the
* public domain.
*/
-static unsigned int avrulex_hash(__attribute__((unused)) hashtab_t h, hashtab_key_t key)
+static unsigned int avrulex_hash(__attribute__((unused)) hashtab_t h, const_hashtab_key_t key)
{
- avtab_key_t *k = (avtab_key_t *)key;
+ const avtab_key_t *k = (const avtab_key_t *)key;
static const uint32_t c1 = 0xcc9e2d51;
static const uint32_t c2 = 0x1b873593;
@@ -4121,11 +4121,11 @@ static unsigned int avrulex_hash(__attribute__((unused)) hashtab_t h, hashtab_ke
}
static int avrulex_compare(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- avtab_key_t *a = (avtab_key_t *)key1;
- avtab_key_t *b = (avtab_key_t *)key2;
+ const avtab_key_t *a = (const avtab_key_t *)key1;
+ const avtab_key_t *b = (const avtab_key_t *)key2;
return a->source_type != b->source_type || a->target_type != b->target_type || a->target_class != b->target_class || a->specified != b->specified;
}
@@ -45,14 +45,14 @@ static pthread_mutex_t cil_strpool_mutex = PTHREAD_MUTEX_INITIALIZER;
static unsigned int cil_strpool_readers = 0;
static hashtab_t cil_strpool_tab = NULL;
-static unsigned int cil_strpool_hash(hashtab_t h, hashtab_key_t key)
+static unsigned int cil_strpool_hash(hashtab_t h, const_hashtab_key_t key)
{
- char *p, *keyp;
+ const char *p, *keyp;
size_t size;
unsigned int val;
val = 0;
- keyp = (char*)key;
+ keyp = (const char*)key;
size = strlen(keyp);
for (p = keyp; ((size_t) (p - keyp)) < size; p++)
val =
@@ -60,10 +60,10 @@ static unsigned int cil_strpool_hash(hashtab_t h, hashtab_key_t key)
return val & (h->size - 1);
}
-static int cil_strpool_compare(hashtab_t h __attribute__ ((unused)), hashtab_key_t key1, hashtab_key_t key2)
+static int cil_strpool_compare(hashtab_t h __attribute__ ((unused)), const_hashtab_key_t key1, const_hashtab_key_t key2)
{
- char *keyp1 = (char*)key1;
- char *keyp2 = (char*)key2;
+ const char *keyp1 = (const char*)key1;
+ const char *keyp2 = (const char*)key2;
return strcmp(keyp1, keyp2);
}
@@ -23,6 +23,7 @@ extern "C" {
#endif
typedef char *hashtab_key_t; /* generic key type */
+typedef const char *const_hashtab_key_t; /* constant generic key type */
typedef void *hashtab_datum_t; /* generic datum type */
typedef struct hashtab_node *hashtab_ptr_t;
@@ -37,8 +38,8 @@ typedef struct hashtab_val {
hashtab_ptr_t *htable; /* hash table */
unsigned int size; /* number of slots in hash table */
uint32_t nel; /* number of elements in hash table */
- unsigned int (*hash_value) (struct hashtab_val * h, hashtab_key_t key); /* hash function */
- int (*keycmp) (struct hashtab_val * h, hashtab_key_t key1, hashtab_key_t key2); /* key comparison function */
+ unsigned int (*hash_value) (struct hashtab_val * h, const_hashtab_key_t key); /* hash function */
+ int (*keycmp) (struct hashtab_val * h, const_hashtab_key_t key1, const_hashtab_key_t key2); /* key comparison function */
} hashtab_val_t;
typedef hashtab_val_t *hashtab_t;
@@ -50,11 +51,11 @@ typedef hashtab_val_t *hashtab_t;
the new hash table otherwise.
*/
extern hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
- const hashtab_key_t
+ const_hashtab_key_t
key),
int (*keycmp) (hashtab_t h,
- const hashtab_key_t key1,
- const hashtab_key_t key2),
+ const_hashtab_key_t key1,
+ const_hashtab_key_t key2),
unsigned int size);
/*
Inserts the specified (key, datum) pair into the specified hash table.
@@ -98,7 +99,7 @@ extern int hashtab_replace(hashtab_t h, hashtab_key_t k, hashtab_datum_t d,
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 hashtab_search(hashtab_t h, const_hashtab_key_t k);
/*
Destroys the specified hash table.
@@ -33,10 +33,10 @@
#include <sepol/policydb/hashtab.h>
hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
- const hashtab_key_t key),
+ const_hashtab_key_t key),
int (*keycmp) (hashtab_t h,
- const hashtab_key_t key1,
- const hashtab_key_t key2),
+ const_hashtab_key_t key1,
+ const_hashtab_key_t key2),
unsigned int size)
{
@@ -175,7 +175,7 @@ int hashtab_replace(hashtab_t h, hashtab_key_t key, hashtab_datum_t datum,
return SEPOL_OK;
}
-hashtab_datum_t hashtab_search(hashtab_t h, const hashtab_key_t key)
+hashtab_datum_t hashtab_search(hashtab_t h, const_hashtab_key_t key)
{
int hvalue;
@@ -727,7 +727,7 @@ partial_name_hash(unsigned long c, unsigned long prevhash)
return (prevhash + (c << 4) + (c >> 4)) * 11;
}
-static unsigned int filenametr_hash(hashtab_t h, hashtab_key_t k)
+static unsigned int filenametr_hash(hashtab_t h, const_hashtab_key_t k)
{
const struct filename_trans *ft = (const struct filename_trans *)k;
unsigned long hash;
@@ -743,7 +743,7 @@ static unsigned int filenametr_hash(hashtab_t h, hashtab_key_t k)
}
static int filenametr_cmp(hashtab_t h __attribute__ ((unused)),
- hashtab_key_t k1, hashtab_key_t k2)
+ const_hashtab_key_t k1, const_hashtab_key_t k2)
{
const struct filename_trans *ft1 = (const struct filename_trans *)k1;
const struct filename_trans *ft2 = (const struct filename_trans *)k2;
@@ -765,7 +765,7 @@ static int filenametr_cmp(hashtab_t h __attribute__ ((unused)),
}
-static unsigned int rangetr_hash(hashtab_t h, hashtab_key_t k)
+static unsigned int rangetr_hash(hashtab_t h, const_hashtab_key_t k)
{
const struct range_trans *key = (const struct range_trans *)k;
return (key->source_type + (key->target_type << 3) +
@@ -773,7 +773,7 @@ static unsigned int rangetr_hash(hashtab_t h, hashtab_key_t k)
}
static int rangetr_cmp(hashtab_t h __attribute__ ((unused)),
- hashtab_key_t k1, hashtab_key_t k2)
+ const_hashtab_key_t k1, const_hashtab_key_t k2)
{
const struct range_trans *key1 = (const struct range_trans *)k1;
const struct range_trans *key2 = (const struct range_trans *)k2;
@@ -13,8 +13,7 @@ int sepol_role_exists(sepol_handle_t * handle __attribute__ ((unused)),
{
policydb_t *policydb = &p->p;
- *response = (hashtab_search(policydb->p_roles.table,
- (const hashtab_key_t)role) != NULL);
+ *response = (hashtab_search(policydb->p_roles.table, role) != NULL);
return STATUS_SUCCESS;
}
@@ -11,14 +11,14 @@
#include <sepol/policydb/hashtab.h>
#include <sepol/policydb/symtab.h>
-static unsigned int symhash(hashtab_t h, hashtab_key_t key)
+static unsigned int symhash(hashtab_t h, const_hashtab_key_t key)
{
- char *p, *keyp;
+ const char *p, *keyp;
size_t size;
unsigned int val;
val = 0;
- keyp = (char *)key;
+ keyp = (const char *)key;
size = strlen(keyp);
for (p = keyp; ((size_t) (p - keyp)) < size; p++)
val =
@@ -27,14 +27,10 @@ static unsigned int symhash(hashtab_t h, hashtab_key_t key)
}
static int symcmp(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- char *keyp1, *keyp2;
-
- keyp1 = (char *)key1;
- keyp2 = (char *)key2;
- return strcmp(keyp1, keyp2);
+ return strcmp(key1, key2);
}
int symtab_init(symtab_t * s, unsigned int size)
@@ -139,8 +139,7 @@ int sepol_user_modify(sepol_handle_t * handle,
goto err;
/* Now, see if a user exists */
- usrdatum = hashtab_search(policydb->p_users.table,
- (const hashtab_key_t)cname);
+ usrdatum = hashtab_search(policydb->p_users.table, cname);
/* If it does, we will modify it */
if (usrdatum) {
@@ -163,8 +162,7 @@ int sepol_user_modify(sepol_handle_t * handle,
for (i = 0; i < num_roles; i++) {
/* Search for the role */
- roldatum = hashtab_search(policydb->p_roles.table,
- (const hashtab_key_t)roles[i]);
+ roldatum = hashtab_search(policydb->p_roles.table, roles[i]);
if (!roldatum) {
ERR(handle, "undefined role %s for user %s",
roles[i], cname);
@@ -301,8 +299,7 @@ int sepol_user_exists(sepol_handle_t * handle __attribute__ ((unused)),
const char *cname;
sepol_user_key_unpack(key, &cname);
- *response = (hashtab_search(policydb->p_users.table,
- (const hashtab_key_t)cname) != NULL);
+ *response = (hashtab_search(policydb->p_users.table, cname) != NULL);
return STATUS_SUCCESS;
}
@@ -328,8 +325,7 @@ int sepol_user_query(sepol_handle_t * handle,
const char *cname;
sepol_user_key_unpack(key, &cname);
- usrdatum = hashtab_search(policydb->p_users.table,
- (const hashtab_key_t)cname);
+ usrdatum = hashtab_search(policydb->p_users.table, cname);
if (!usrdatum) {
*response = NULL;
@@ -12,10 +12,10 @@
#include "hashtab.h"
hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
- const hashtab_key_t key),
+ const_hashtab_key_t key),
int (*keycmp) (hashtab_t h,
- const hashtab_key_t key1,
- const hashtab_key_t key2),
+ const_hashtab_key_t key1,
+ const_hashtab_key_t key2),
unsigned int size)
{
@@ -154,7 +154,7 @@ int hashtab_replace(hashtab_t h, hashtab_key_t key, hashtab_datum_t datum,
return HASHTAB_SUCCESS;
}
-hashtab_datum_t hashtab_search(hashtab_t h, const hashtab_key_t key)
+hashtab_datum_t hashtab_search(hashtab_t h, const_hashtab_key_t key)
{
int hvalue;
@@ -19,6 +19,7 @@
#include <stdio.h>
typedef char *hashtab_key_t; /* generic key type */
+typedef const char *const_hashtab_key_t; /* constant generic key type */
typedef void *hashtab_datum_t; /* generic datum type */
typedef struct hashtab_node *hashtab_ptr_t;
@@ -33,8 +34,8 @@ typedef struct hashtab_val {
hashtab_ptr_t *htable; /* hash table */
unsigned int size; /* number of slots in hash table */
uint32_t nel; /* number of elements in hash table */
- unsigned int (*hash_value) (struct hashtab_val * h, hashtab_key_t key); /* hash function */
- int (*keycmp) (struct hashtab_val * h, hashtab_key_t key1, hashtab_key_t key2); /* key comparison function */
+ unsigned int (*hash_value) (struct hashtab_val * h, const_hashtab_key_t key); /* hash function */
+ int (*keycmp) (struct hashtab_val * h, const_hashtab_key_t key1, const_hashtab_key_t key2); /* key comparison function */
} hashtab_val_t;
typedef hashtab_val_t *hashtab_t;
@@ -52,11 +53,11 @@ typedef hashtab_val_t *hashtab_t;
the new hash table otherwise.
*/
extern hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
- const hashtab_key_t
+ const_hashtab_key_t
key),
int (*keycmp) (hashtab_t h,
- const hashtab_key_t key1,
- const hashtab_key_t key2),
+ const_hashtab_key_t key1,
+ const_hashtab_key_t key2),
unsigned int size);
/*
Inserts the specified (key, datum) pair into the specified hash table.
@@ -100,7 +101,7 @@ extern int hashtab_replace(hashtab_t h, hashtab_key_t k, hashtab_datum_t d,
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 hashtab_search(hashtab_t h, const_hashtab_key_t k);
/*
Destroys the specified hash table.
@@ -228,7 +228,7 @@ static int free_hashtab_entry(hashtab_key_t key, hashtab_datum_t d,
return 0;
}
-static unsigned int reqsymhash(hashtab_t h, hashtab_key_t key)
+static unsigned int reqsymhash(hashtab_t h, const_hashtab_key_t key)
{
char *p, *keyp;
size_t size;
@@ -244,14 +244,10 @@ static unsigned int reqsymhash(hashtab_t h, hashtab_key_t key)
}
static int reqsymcmp(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- char *keyp1, *keyp2;
-
- keyp1 = (char *)key1;
- keyp2 = (char *)key2;
- return strcmp(keyp1, keyp2);
+ return strcmp(key1, key2);
}
static hashtab_t app_service_names = NULL;
@@ -52,14 +52,14 @@ static void usage(char *program_name)
/* Basic string hash and compare for the hashtables used in
* generate_requires. Copied from symtab.c.
*/
-static unsigned int reqsymhash(hashtab_t h, hashtab_key_t key)
+static unsigned int reqsymhash(hashtab_t h, const_hashtab_key_t key)
{
- char *p, *keyp;
+ const char *p, *keyp;
size_t size;
unsigned int val;
val = 0;
- keyp = (char *)key;
+ keyp = (const char *)key;
size = strlen(keyp);
for (p = keyp; ((size_t) (p - keyp)) < size; p++)
val =
@@ -68,14 +68,10 @@ static unsigned int reqsymhash(hashtab_t h, hashtab_key_t key)
}
static int reqsymcmp(hashtab_t h
- __attribute__ ((unused)), hashtab_key_t key1,
- hashtab_key_t key2)
+ __attribute__ ((unused)), const_hashtab_key_t key1,
+ const_hashtab_key_t key2)
{
- char *keyp1, *keyp2;
-
- keyp1 = (char *)key1;
- keyp2 = (char *)key2;
- return strcmp(keyp1, keyp2);
+ return strcmp(key1, key2);
}
/* Load a policy package from the given filename. Progname is used for
Even though "hashtab_key_t" is an alias for "char *", "const hashtab_key_t" is not an alias for "(const char) *" but means "(char *) const". Introduce const_hashtab_key_t to map "(const char) *" and use it in hashtab_search() and hashtab key comparison functions. Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org> --- libsepol/cil/src/cil_binary.c | 48 ++++++++++++++-------------- libsepol/cil/src/cil_strpool.c | 12 +++---- libsepol/include/sepol/policydb/hashtab.h | 13 ++++---- libsepol/src/hashtab.c | 8 ++--- libsepol/src/policydb.c | 8 ++--- libsepol/src/roles.c | 3 +- libsepol/src/symtab.c | 16 ++++------ libsepol/src/users.c | 12 +++---- policycoreutils/newrole/hashtab.c | 8 ++--- policycoreutils/newrole/hashtab.h | 13 ++++---- policycoreutils/newrole/newrole.c | 12 +++---- semodule-utils/semodule_deps/semodule_deps.c | 16 ++++------ 12 files changed, 77 insertions(+), 92 deletions(-)