copyright
[openssl.git] / crypto / mem_dbg.c
index b9ca5913d11774dea0e2128d4a9d4cd82316a4e1..1c4e04f51fc480f70e655815157096a9ef40efa5 100644 (file)
@@ -238,8 +238,8 @@ long CRYPTO_dbg_get_options(void)
 /* static int mem_cmp(MEM *a, MEM *b) */
 static int mem_cmp(const void *a_void, const void *b_void)
        {
-       return((const char *)((MEM *)a_void)->addr
-               - (const char *)((MEM *)b_void)->addr);
+       return((const char *)((const MEM *)a_void)->addr
+               - (const char *)((const MEM *)b_void)->addr);
        }
 
 /* static unsigned long mem_hash(MEM *a) */
@@ -576,7 +576,7 @@ typedef struct mem_leak_st
        long bytes;
        } MEM_LEAK;
 
-static void print_leak(MEM *m, MEM_LEAK *l)
+static void print_leak(const MEM *m, MEM_LEAK *l)
        {
        char buf[1024];
        char *bufp = buf;
@@ -661,7 +661,7 @@ static void print_leak(MEM *m, MEM_LEAK *l)
 #endif
        }
 
-static IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, MEM *, MEM_LEAK *)
+static IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, const MEM *, MEM_LEAK *)
 
 void CRYPTO_mem_leaks(BIO *b)
        {
@@ -731,14 +731,19 @@ void CRYPTO_mem_leaks(BIO *b)
        MemCheck_on(); /* release MALLOC2 lock */
        }
 
-#ifndef NO_FP_API
+#ifndef OPENSSL_NO_FP_API
 void CRYPTO_mem_leaks_fp(FILE *fp)
        {
        BIO *b;
 
        if (mh == NULL) return;
-       if ((b=BIO_new(BIO_s_file())) == NULL)
-               return;
+       /* Need to turn off memory checking when allocated BIOs ... especially
+        * as we're creating them at a time when we're trying to check we've not
+        * left anything un-free()'d!! */
+       MemCheck_off();
+       b = BIO_new(BIO_s_file());
+       MemCheck_on();
+       if(!b) return;
        BIO_set_fp(b,fp,BIO_NOCLOSE);
        CRYPTO_mem_leaks(b);
        BIO_free(b);
@@ -753,14 +758,14 @@ void CRYPTO_mem_leaks_fp(FILE *fp)
 /* 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)
+static void cb_leak(const MEM *m, CRYPTO_MEM_LEAK_CB **cb)
        {
        (**cb)(m->order,m->file,m->line,m->num,m->addr);
        }
 
-static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, MEM *, CRYPTO_MEM_LEAK_CB *)
+static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, const MEM *, CRYPTO_MEM_LEAK_CB **)
 
-void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB cb)
+void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb)
        {
        if (mh == NULL) return;
        CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2);