Get rid of the function pointer casting in the debugging memory code due
authorGeoff Thorpe <geoff@openssl.org>
Tue, 9 Jan 2001 00:13:25 +0000 (00:13 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Tue, 9 Jan 2001 00:13:25 +0000 (00:13 +0000)
to LHASH usage. NB: The callback type used as been suctioned off into
crypto.h as CRYPTO_MEM_LEAK_CB to improve clarity.

crypto/crypto.h
crypto/mem_dbg.c

index 08bb1fc..96a852a 100644 (file)
@@ -374,7 +374,8 @@ void CRYPTO_mem_leaks_fp(FILE *);
 #endif
 void CRYPTO_mem_leaks(struct bio_st *bio);
 /* unsigned long order, char *file, int line, int num_bytes, char *addr */
-void CRYPTO_mem_leaks_cb(void (*cb)(unsigned long, const char *, int, int, void *));
+typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *);
+void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB cb);
 
 void ERR_load_CRYPTO_strings(void);
 
index a6c70e4..fb1fdd7 100644 (file)
@@ -641,6 +641,8 @@ static void print_leak(MEM *m, MEM_LEAK *l)
 #endif
        }
 
+static IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, MEM *, MEM_LEAK *)
+
 void CRYPTO_mem_leaks(BIO *b)
        {
        MEM_LEAK ml;
@@ -653,7 +655,7 @@ void CRYPTO_mem_leaks(BIO *b)
        ml.chunks=0;
        MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */
        if (mh != NULL)
-               lh_doall_arg(mh, (LHASH_DOALL_ARG_FN_TYPE)print_leak,
+               lh_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak),
                                (char *)&ml);
        if (ml.chunks != 0)
                {
@@ -732,16 +734,20 @@ void CRYPTO_mem_leaks_fp(FILE *fp)
 /* FIXME: We really don't allow much to the callback.  For example, it has
    no chance of reaching the info stack for the item it processes.  Should
    it really be this way?  -- Richard Levitte */
-static void cb_leak(MEM *m,
-                   void (**cb)(unsigned long, const char *, int, int, void *))
+/* NB: The prototypes have been typedef'd to CRYPTO_MEM_LEAK_CB inside crypto.h
+ * If this code is restructured, remove the callback type if it is no longer
+ * needed. -- Geoff Thorpe */
+static void cb_leak(MEM *m, CRYPTO_MEM_LEAK_CB *cb)
        {
        (**cb)(m->order,m->file,m->line,m->num,m->addr);
        }
 
-void CRYPTO_mem_leaks_cb(void (*cb)(unsigned long, const char *, int, int, void *))
+static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, MEM *, CRYPTO_MEM_LEAK_CB *)
+
+void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB cb)
        {
        if (mh == NULL) return;
        CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2);
-       lh_doall_arg(mh, (LHASH_DOALL_ARG_FN_TYPE)cb_leak,(void *)&cb);
+       lh_doall_arg(mh, LHASH_DOALL_ARG_FN(cb_leak), &cb);
        CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2);
        }