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
11
CHANGES
11
CHANGES
@ -4,6 +4,17 @@
|
|||||||
|
|
||||||
Changes between 0.9.7c and 0.9.8 [xx XXX xxxx]
|
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
|
*) The tmdiff.h API was so ugly and minimal that our own timing utility
|
||||||
(speed) prefers to use its own implementation. The two implementations
|
(speed) prefers to use its own implementation. The two implementations
|
||||||
haven't been consolidated as yet (volunteers?) but the tmdiff API has had
|
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
|
/* 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
|
* "ex_data" prior to the ex_data hash table being itself destroyed. Doesn't do
|
||||||
* any locking. */
|
* 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;
|
EX_CLASS_ITEM *item = (EX_CLASS_ITEM *)a_void;
|
||||||
sk_CRYPTO_EX_DATA_FUNCS_pop_free(item->meth, def_cleanup_util_cb);
|
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);
|
OPENSSL_free(lh);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *lh_insert(LHASH *lh, const void *data)
|
void *lh_insert(LHASH *lh, void *data)
|
||||||
{
|
{
|
||||||
unsigned long hash;
|
unsigned long hash;
|
||||||
LHASH_NODE *nn,**rn;
|
LHASH_NODE *nn,**rn;
|
||||||
|
@ -78,7 +78,7 @@ extern "C" {
|
|||||||
|
|
||||||
typedef struct lhash_node_st
|
typedef struct lhash_node_st
|
||||||
{
|
{
|
||||||
const void *data;
|
void *data;
|
||||||
struct lhash_node_st *next;
|
struct lhash_node_st *next;
|
||||||
#ifndef OPENSSL_NO_HASH_COMP
|
#ifndef OPENSSL_NO_HASH_COMP
|
||||||
unsigned long hash;
|
unsigned long hash;
|
||||||
@ -87,8 +87,8 @@ typedef struct lhash_node_st
|
|||||||
|
|
||||||
typedef int (*LHASH_COMP_FN_TYPE)(const void *, const void *);
|
typedef int (*LHASH_COMP_FN_TYPE)(const void *, const void *);
|
||||||
typedef unsigned long (*LHASH_HASH_FN_TYPE)(const void *);
|
typedef unsigned long (*LHASH_HASH_FN_TYPE)(const void *);
|
||||||
typedef void (*LHASH_DOALL_FN_TYPE)(const void *);
|
typedef void (*LHASH_DOALL_FN_TYPE)(void *);
|
||||||
typedef void (*LHASH_DOALL_ARG_FN_TYPE)(const void *, void *);
|
typedef void (*LHASH_DOALL_ARG_FN_TYPE)(void *, void *);
|
||||||
|
|
||||||
/* Macros for declaring and implementing type-safe wrappers for LHASH callbacks.
|
/* Macros for declaring and implementing type-safe wrappers for LHASH callbacks.
|
||||||
* This way, callbacks can be provided to LHASH structures without function
|
* 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 */
|
/* Third: "doall" functions */
|
||||||
#define DECLARE_LHASH_DOALL_FN(f_name,o_type) \
|
#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) \
|
#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; \
|
o_type a = (o_type)arg; \
|
||||||
f_name(a); }
|
f_name(a); }
|
||||||
#define LHASH_DOALL_FN(f_name) f_name##_LHASH_DOALL
|
#define LHASH_DOALL_FN(f_name) f_name##_LHASH_DOALL
|
||||||
|
|
||||||
/* Fourth: "doall_arg" functions */
|
/* Fourth: "doall_arg" functions */
|
||||||
#define DECLARE_LHASH_DOALL_ARG_FN(f_name,o_type,a_type) \
|
#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) \
|
#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; \
|
o_type a = (o_type)arg1; \
|
||||||
a_type b = (a_type)arg2; \
|
a_type b = (a_type)arg2; \
|
||||||
f_name(a,b); }
|
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);
|
LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c);
|
||||||
void lh_free(LHASH *lh);
|
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_delete(LHASH *lh, const void *data);
|
||||||
void *lh_retrieve(LHASH *lh, const void *data);
|
void *lh_retrieve(LHASH *lh, const void *data);
|
||||||
void lh_doall(LHASH *lh, LHASH_DOALL_FN_TYPE func);
|
void lh_doall(LHASH *lh, LHASH_DOALL_FN_TYPE func);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user