1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/mem.c */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h>
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/crypto.h>
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h"
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int allow_customize = 1;      /* we provide flexible functions for */
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int allow_customize_debug = 1;/* exchanging memory-related functions at
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                      * run-time, but this must be done
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                      * before any blocks are actually
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                      * allocated; or we'll run into huge
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                      * problems when malloc/free pairs
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                      * don't match etc. */
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* the following pointers may be changed as long as 'allow_customize' is set */
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_func)(size_t)         = malloc;
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *default_malloc_ex(size_t num, const char *file, int line)
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{ return malloc_func(num); }
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_ex_func)(size_t, const char *file, int line)
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        = default_malloc_ex;
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*realloc_func)(void *, size_t)= realloc;
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *default_realloc_ex(void *str, size_t num,
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        const char *file, int line)
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{ return realloc_func(str,num); }
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*realloc_ex_func)(void *, size_t, const char *file, int line)
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        = default_realloc_ex;
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_func)(void *)            = free;
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_locked_func)(size_t)  = malloc;
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *default_malloc_locked_ex(size_t num, const char *file, int line)
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{ return malloc_locked_func(num); }
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_locked_ex_func)(size_t, const char *file, int line)
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        = default_malloc_locked_ex;
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_locked_func)(void *)     = free;
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* may be changed as long as 'allow_customize_debug' is set */
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* XXX use correct function pointer types */
104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifdef CRYPTO_MDEBUG
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* use default functions from mem_dbg.c */
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*malloc_debug_func)(void *,int,const char *,int,int)
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	= CRYPTO_dbg_malloc;
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*realloc_debug_func)(void *,void *,int,const char *,int,int)
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	= CRYPTO_dbg_realloc;
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_debug_func)(void *,int) = CRYPTO_dbg_free;
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options;
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options;
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* applications can use CRYPTO_malloc_debug_init() to select above case
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * at run-time */
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*malloc_debug_func)(void *,int,const char *,int,int) = NULL;
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*realloc_debug_func)(void *,void *,int,const char *,int,int)
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	= NULL;
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_debug_func)(void *,int) = NULL;
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*set_debug_options_func)(long) = NULL;
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long (*get_debug_options_func)(void) = NULL;
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t),
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void (*f)(void *))
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
12704ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom	/* Dummy call just to ensure OPENSSL_init() gets linked in */
128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	OPENSSL_init();
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!allow_customize)
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((m == 0) || (r == 0) || (f == 0))
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_func=m; malloc_ex_func=default_malloc_ex;
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	realloc_func=r; realloc_ex_func=default_realloc_ex;
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_func=f;
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex;
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_locked_func=f;
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_ex_functions(
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void *(*m)(size_t,const char *,int),
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void *(*r)(void *, size_t,const char *,int),
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void (*f)(void *))
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!allow_customize)
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((m == 0) || (r == 0) || (f == 0))
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_func=0; malloc_ex_func=m;
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	realloc_func=0; realloc_ex_func=r;
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_func=f;
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_locked_func=0; malloc_locked_ex_func=m;
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_locked_func=f;
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *))
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!allow_customize)
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((m == NULL) || (f == NULL))
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex;
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_locked_func=f;
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_locked_mem_ex_functions(
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void *(*m)(size_t,const char *,int),
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void (*f)(void *))
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!allow_customize)
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((m == NULL) || (f == NULL))
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_locked_func=0; malloc_locked_ex_func=m;
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_func=f;
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int),
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   void (*r)(void *,void *,int,const char *,int,int),
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   void (*f)(void *,int),
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   void (*so)(long),
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   long (*go)(void))
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!allow_customize_debug)
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
190392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	OPENSSL_init();
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc_debug_func=m;
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	realloc_debug_func=r;
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_debug_func=f;
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	set_debug_options_func=so;
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	get_debug_options_func=go;
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t),
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void (**f)(void *))
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (m != NULL) *m = (malloc_ex_func == default_malloc_ex) ?
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	                     malloc_func : 0;
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (r != NULL) *r = (realloc_ex_func == default_realloc_ex) ?
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	                     realloc_func : 0;
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (f != NULL) *f=free_func;
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_ex_functions(
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void *(**m)(size_t,const char *,int),
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void *(**r)(void *, size_t,const char *,int),
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void (**f)(void *))
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (m != NULL) *m = (malloc_ex_func != default_malloc_ex) ?
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	                    malloc_ex_func : 0;
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (r != NULL) *r = (realloc_ex_func != default_realloc_ex) ?
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	                    realloc_ex_func : 0;
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (f != NULL) *f=free_func;
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *))
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (m != NULL) *m = (malloc_locked_ex_func == default_malloc_locked_ex) ?
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	                     malloc_locked_func : 0;
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (f != NULL) *f=free_locked_func;
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_locked_mem_ex_functions(
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void *(**m)(size_t,const char *,int),
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        void (**f)(void *))
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (m != NULL) *m = (malloc_locked_ex_func != default_malloc_locked_ex) ?
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	                    malloc_locked_ex_func : 0;
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (f != NULL) *f=free_locked_func;
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int),
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    void (**r)(void *,void *,int,const char *,int,int),
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    void (**f)(void *,int),
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    void (**so)(long),
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    long (**go)(void))
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (m != NULL) *m=malloc_debug_func;
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (r != NULL) *r=realloc_debug_func;
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (f != NULL) *f=free_debug_func;
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (so != NULL) *so=set_debug_options_func;
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (go != NULL) *go=get_debug_options_func;
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_malloc_locked(int num, const char *file, int line)
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *ret = NULL;
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (num <= 0) return NULL;
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	allow_customize = 0;
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (malloc_debug_func != NULL)
260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		allow_customize_debug = 0;
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		malloc_debug_func(NULL, num, file, line, 0);
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret = malloc_locked_ex_func(num,file,line);
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	fprintf(stderr, "LEVITTE_DEBUG_MEM:         > 0x%p (%d)\n", ret, num);
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (malloc_debug_func != NULL)
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		malloc_debug_func(ret, num, file, line, 1);
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
271221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef OPENSSL_CPUID_OBJ
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        /* Create a dependency on the value of 'cleanse_ctr' so our memory
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project         * sanitisation function can't be optimised out. NB: We only do
274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project         * this for >2Kb so the overhead doesn't bother us. */
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        if(ret && (num > 2048))
276221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	{	extern unsigned char cleanse_ctr;
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		((unsigned char *)ret)[0] = cleanse_ctr;
278221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	}
279221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return ret;
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_free_locked(void *str)
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (free_debug_func != NULL)
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		free_debug_func(str, 0);
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM
289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	fprintf(stderr, "LEVITTE_DEBUG_MEM:         < 0x%p\n", str);
290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_locked_func(str);
292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (free_debug_func != NULL)
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		free_debug_func(NULL, 1);
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_malloc(int num, const char *file, int line)
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *ret = NULL;
299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (num <= 0) return NULL;
301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	allow_customize = 0;
303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (malloc_debug_func != NULL)
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		allow_customize_debug = 0;
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		malloc_debug_func(NULL, num, file, line, 0);
307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret = malloc_ex_func(num,file,line);
309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM
310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	fprintf(stderr, "LEVITTE_DEBUG_MEM:         > 0x%p (%d)\n", ret, num);
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (malloc_debug_func != NULL)
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		malloc_debug_func(ret, num, file, line, 1);
314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
315221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef OPENSSL_CPUID_OBJ
316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        /* Create a dependency on the value of 'cleanse_ctr' so our memory
317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project         * sanitisation function can't be optimised out. NB: We only do
318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project         * this for >2Kb so the overhead doesn't bother us. */
319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        if(ret && (num > 2048))
320221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	{	extern unsigned char cleanse_ctr;
321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                ((unsigned char *)ret)[0] = cleanse_ctr;
322221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	}
323221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif
324221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
325221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	return ret;
326221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	}
327221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromchar *CRYPTO_strdup(const char *str, const char *file, int line)
328221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	{
329221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	char *ret = CRYPTO_malloc(strlen(str)+1, file, line);
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
331221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	strcpy(ret, str);
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return ret;
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_realloc(void *str, int num, const char *file, int line)
336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *ret = NULL;
338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (str == NULL)
340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return CRYPTO_malloc(num, file, line);
341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (num <= 0) return NULL;
343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (realloc_debug_func != NULL)
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		realloc_debug_func(str, NULL, num, file, line, 0);
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret = realloc_ex_func(str,num,file,line);
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM
348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	fprintf(stderr, "LEVITTE_DEBUG_MEM:         | 0x%p -> 0x%p (%d)\n", str, ret, num);
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (realloc_debug_func != NULL)
351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		realloc_debug_func(str, ret, num, file, line, 1);
352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return ret;
354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file,
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			   int line)
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *ret = NULL;
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (str == NULL)
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return CRYPTO_malloc(num, file, line);
363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (num <= 0) return NULL;
365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
366243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom	/* We don't support shrinking the buffer. Note the memcpy that copies
367243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom	 * |old_len| bytes to the new buffer, below. */
368243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom	if (num < old_len) return NULL;
369243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom
370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (realloc_debug_func != NULL)
371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		realloc_debug_func(str, NULL, num, file, line, 0);
372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret=malloc_ex_func(num,file,line);
373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if(ret)
374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		memcpy(ret,str,old_len);
376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		OPENSSL_cleanse(str,old_len);
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		free_func(str);
378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM
380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	fprintf(stderr,
381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		"LEVITTE_DEBUG_MEM:         | 0x%p -> 0x%p (%d)\n",
382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		str, ret, num);
383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (realloc_debug_func != NULL)
385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		realloc_debug_func(str, ret, num, file, line, 1);
386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return ret;
388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_free(void *str)
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (free_debug_func != NULL)
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		free_debug_func(str, 0);
394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM
395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	fprintf(stderr, "LEVITTE_DEBUG_MEM:         < 0x%p\n", str);
396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	free_func(str);
398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (free_debug_func != NULL)
399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		free_debug_func(NULL, 1);
400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_remalloc(void *a, int num, const char *file, int line)
403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (a != NULL) OPENSSL_free(a);
405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	a=(char *)OPENSSL_malloc(num);
406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(a);
407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_mem_debug_options(long bits)
410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (set_debug_options_func != NULL)
412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		set_debug_options_func(bits);
413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong CRYPTO_get_mem_debug_options(void)
416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (get_debug_options_func != NULL)
418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return get_debug_options_func();
419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 0;
420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
421