diff options
author | Geoff Thorpe <geoff@openssl.org> | 2001-09-03 18:24:56 +0000 |
---|---|---|
committer | Geoff Thorpe <geoff@openssl.org> | 2001-09-03 18:24:56 +0000 |
commit | 1738bb61e1036908eca3ae7b21be38aa493ac682 (patch) | |
tree | 2bc1a8b49af0e7b2c96df8dfb19cd72515f12160 /crypto | |
parent | 91b3f0e691aa68daaaf137de2913b21260f94a05 (diff) | |
download | openssl-1738bb61e1036908eca3ae7b21be38aa493ac682.tar.gz |
Add a new ERR function, "ERR_unload_strings", to complement the existing
"ERR_load_strings" function.
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/err/err.c | 26 | ||||
-rw-r--r-- | crypto/err/err.h | 1 |
2 files changed, 27 insertions, 0 deletions
diff --git a/crypto/err/err.c b/crypto/err/err.c index 0152d23b6b..81822b4aea 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -218,6 +218,7 @@ struct st_ERR_FNS void (*cb_err_del)(void); ERR_STRING_DATA *(*cb_err_get_item)(const ERR_STRING_DATA *); ERR_STRING_DATA *(*cb_err_set_item)(ERR_STRING_DATA *); + ERR_STRING_DATA *(*cb_err_del_item)(ERR_STRING_DATA *); /* Works on the "thread_hash" error-state table */ LHASH *(*cb_thread_get)(void); ERR_STATE *(*cb_thread_get_item)(const ERR_STATE *); @@ -232,6 +233,7 @@ static LHASH *int_err_get(void); static void int_err_del(void); static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *); static ERR_STRING_DATA *int_err_set_item(ERR_STRING_DATA *); +static ERR_STRING_DATA *int_err_del_item(ERR_STRING_DATA *); static LHASH *int_thread_get(void); static ERR_STATE *int_thread_get_item(const ERR_STATE *); static ERR_STATE *int_thread_set_item(ERR_STATE *); @@ -244,6 +246,7 @@ static const ERR_FNS err_defaults = int_err_del, int_err_get_item, int_err_set_item, + int_err_del_item, int_thread_get, int_thread_get_item, int_thread_set_item, @@ -368,6 +371,19 @@ static ERR_STRING_DATA *int_err_set_item(ERR_STRING_DATA *d) CRYPTO_r_unlock(CRYPTO_LOCK_ERR); return p; } +static ERR_STRING_DATA *int_err_del_item(ERR_STRING_DATA *d) + { + ERR_STRING_DATA *p; + LHASH *hash; + err_fns_check(); + hash = ERRFN(err_get)(); + if(!hash) + return NULL; + CRYPTO_r_lock(CRYPTO_LOCK_ERR); + p = (ERR_STRING_DATA *)lh_delete(hash, d); + CRYPTO_r_unlock(CRYPTO_LOCK_ERR); + return p; + } static LHASH *int_thread_get(void) { LHASH *toret = NULL; @@ -545,6 +561,16 @@ void ERR_load_strings(int lib, ERR_STRING_DATA *str) } } +void ERR_unload_strings(int lib, ERR_STRING_DATA *str) + { + while(str->error) + { + str->error|=ERR_PACK(lib,0,0); + ERRFN(err_del_item)(str); + str++; + } + } + void ERR_free_strings(void) { err_fns_check(); diff --git a/crypto/err/err.h b/crypto/err/err.h index 70a3566f4c..c3b54983ba 100644 --- a/crypto/err/err.h +++ b/crypto/err/err.h @@ -259,6 +259,7 @@ void ERR_print_errors(BIO *bp); void ERR_add_error_data(int num, ...); #endif void ERR_load_strings(int lib,ERR_STRING_DATA str[]); +void ERR_unload_strings(int lib,ERR_STRING_DATA str[]); void ERR_load_ERR_strings(void); void ERR_load_crypto_strings(void); void ERR_free_strings(void); |