Relax some over-zealous constification that gave some lhash-based code no
choice but to have to cast away "const" qualifiers from their prototypes. This does not remove constification restrictions from hash/compare callbacks, but allows destructor commands to be run over a tables' elements without bad casts.
This commit is contained in:
parent
6bcd3f903a
commit
8dc344ccbf
4 changed files with 21 additions and 10 deletions
11
CHANGES
11
CHANGES
|
@ -4,6 +4,17 @@
|
|||
|
||||
Changes between 0.9.7c and 0.9.8 [xx XXX xxxx]
|
||||
|
||||
*) Because of the callback-based approach for implementing LHASH as a
|
||||
template type, lh_insert() adds opaque objects to hash-tables and
|
||||
lh_doall() or lh_doall_arg() are typically used with a destructor callback
|
||||
to clean up those corresponding objects before destroying the hash table
|
||||
(and losing the object pointers). So some over-zealous constifications in
|
||||
LHASH have been relaxed so that lh_insert() does not take (nor store) the
|
||||
objects as "const" and the lh_doall[_arg] callback wrappers are not
|
||||
prototyped to have "const" restrictions on the object pointers they are
|
||||
given (and so aren't required to cast them away any more).
|
||||
[Geoff Thorpe]
|
||||
|
||||
*) The tmdiff.h API was so ugly and minimal that our own timing utility
|
||||
(speed) prefers to use its own implementation. The two implementations
|
||||
haven't been consolidated as yet (volunteers?) but the tmdiff API has had
|
||||
|
|
|
@ -287,7 +287,7 @@ static void def_cleanup_util_cb(CRYPTO_EX_DATA_FUNCS *funcs)
|
|||
/* This callback is used in lh_doall to destroy all EX_CLASS_ITEM values from
|
||||
* "ex_data" prior to the ex_data hash table being itself destroyed. Doesn't do
|
||||
* any locking. */
|
||||
static void def_cleanup_cb(const void *a_void)
|
||||
static void def_cleanup_cb(void *a_void)
|
||||
{
|
||||
EX_CLASS_ITEM *item = (EX_CLASS_ITEM *)a_void;
|
||||
sk_CRYPTO_EX_DATA_FUNCS_pop_free(item->meth, def_cleanup_util_cb);
|
||||
|
|
|
@ -176,7 +176,7 @@ void lh_free(LHASH *lh)
|
|||
OPENSSL_free(lh);
|
||||
}
|
||||
|
||||
void *lh_insert(LHASH *lh, const void *data)
|
||||
void *lh_insert(LHASH *lh, void *data)
|
||||
{
|
||||
unsigned long hash;
|
||||
LHASH_NODE *nn,**rn;
|
||||
|
|
|
@ -78,7 +78,7 @@ extern "C" {
|
|||
|
||||
typedef struct lhash_node_st
|
||||
{
|
||||
const void *data;
|
||||
void *data;
|
||||
struct lhash_node_st *next;
|
||||
#ifndef OPENSSL_NO_HASH_COMP
|
||||
unsigned long hash;
|
||||
|
@ -87,8 +87,8 @@ typedef struct lhash_node_st
|
|||
|
||||
typedef int (*LHASH_COMP_FN_TYPE)(const void *, const void *);
|
||||
typedef unsigned long (*LHASH_HASH_FN_TYPE)(const void *);
|
||||
typedef void (*LHASH_DOALL_FN_TYPE)(const void *);
|
||||
typedef void (*LHASH_DOALL_ARG_FN_TYPE)(const void *, void *);
|
||||
typedef void (*LHASH_DOALL_FN_TYPE)(void *);
|
||||
typedef void (*LHASH_DOALL_ARG_FN_TYPE)(void *, void *);
|
||||
|
||||
/* Macros for declaring and implementing type-safe wrappers for LHASH callbacks.
|
||||
* This way, callbacks can be provided to LHASH structures without function
|
||||
|
@ -118,18 +118,18 @@ typedef void (*LHASH_DOALL_ARG_FN_TYPE)(const void *, void *);
|
|||
|
||||
/* Third: "doall" functions */
|
||||
#define DECLARE_LHASH_DOALL_FN(f_name,o_type) \
|
||||
void f_name##_LHASH_DOALL(const void *);
|
||||
void f_name##_LHASH_DOALL(void *);
|
||||
#define IMPLEMENT_LHASH_DOALL_FN(f_name,o_type) \
|
||||
void f_name##_LHASH_DOALL(const void *arg) { \
|
||||
void f_name##_LHASH_DOALL(void *arg) { \
|
||||
o_type a = (o_type)arg; \
|
||||
f_name(a); }
|
||||
#define LHASH_DOALL_FN(f_name) f_name##_LHASH_DOALL
|
||||
|
||||
/* Fourth: "doall_arg" functions */
|
||||
#define DECLARE_LHASH_DOALL_ARG_FN(f_name,o_type,a_type) \
|
||||
void f_name##_LHASH_DOALL_ARG(const void *, void *);
|
||||
void f_name##_LHASH_DOALL_ARG(void *, void *);
|
||||
#define IMPLEMENT_LHASH_DOALL_ARG_FN(f_name,o_type,a_type) \
|
||||
void f_name##_LHASH_DOALL_ARG(const void *arg1, void *arg2) { \
|
||||
void f_name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \
|
||||
o_type a = (o_type)arg1; \
|
||||
a_type b = (a_type)arg2; \
|
||||
f_name(a,b); }
|
||||
|
@ -173,7 +173,7 @@ typedef struct lhash_st
|
|||
|
||||
LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c);
|
||||
void lh_free(LHASH *lh);
|
||||
void *lh_insert(LHASH *lh, const void *data);
|
||||
void *lh_insert(LHASH *lh, void *data);
|
||||
void *lh_delete(LHASH *lh, const void *data);
|
||||
void *lh_retrieve(LHASH *lh, const void *data);
|
||||
void lh_doall(LHASH *lh, LHASH_DOALL_FN_TYPE func);
|
||||
|
|
Loading…
Reference in a new issue