]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_cryptkit/lib/falloc.c
Security-57336.10.29.tar.gz
[apple/security.git] / OSX / libsecurity_cryptkit / lib / falloc.c
1 /* Copyright (c) 1998,2011,2014 Apple Inc. All Rights Reserved.
2 *
3 * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
4 * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
5 * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
6 * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
7 * INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
8 * EXPOSE YOU TO LIABILITY.
9 ***************************************************************************
10 *
11 * falloc.c - FEE malloc routines
12 *
13 * Revision History
14 * ----------------
15 * 28 May 98 at Apple
16 * Added Mac-specific allocators from temp memory
17 * 20 Aug 96 at NeXT
18 * Created.
19 */
20
21 #include "platform.h"
22 #include "falloc.h"
23 #include <stdlib.h>
24
25 /* watchpoint emulator */
26 #define FALLOC_WATCH 0
27 #if FALLOC_WATCH
28 #include <stdio.h>
29 /* set these with debugger */
30 void *mallocWatchAddrs;
31 void *freeWatchAddrs;
32 #endif
33
34 /* if NULL, use our own */
35 static mallocExternFcn *mallocExt = NULL;
36 static freeExternFcn *freeExt = NULL;
37 static reallocExternFcn *reallocExt = NULL;
38
39 void fallocRegister(mallocExternFcn *mallocExtern,
40 freeExternFcn *freeExtern,
41 reallocExternFcn *reallocExtern)
42 {
43 mallocExt = mallocExtern;
44 freeExt = freeExtern;
45 reallocExt = reallocExtern;
46 }
47
48 /*
49 * All this can be optimized and tailored to specific platforms, of course...
50 */
51
52 void *fmalloc(unsigned size)
53 {
54 void *rtn;
55 if(mallocExt != NULL) {
56 rtn = (mallocExt)(size);
57 }
58 else {
59 rtn = malloc(size);
60 }
61 #if FALLOC_WATCH
62 if(rtn == mallocWatchAddrs) {
63 printf("====fmalloc watchpoint (0x%x) hit\n",
64 (unsigned)mallocWatchAddrs);
65 }
66 #endif
67 return rtn;
68 }
69
70 void *fmallocWithData(const void *origData,
71 unsigned origDataLen)
72 {
73 void *rtn = fmalloc(origDataLen);
74
75 bcopy(origData, rtn, origDataLen);
76 return rtn;
77 }
78
79 void ffree(void *data)
80 {
81 #if FALLOC_WATCH
82 if(data == freeWatchAddrs) {
83 printf("====ffree watchpoint (0x%x) hit\n",
84 (unsigned)freeWatchAddrs);
85 }
86 #endif
87 if(freeExt != NULL) {
88 (freeExt)(data);
89 }
90 else {
91 free(data);
92 }
93 }
94
95 void *frealloc(void *oldPtr, unsigned newSize)
96 {
97 #if FALLOC_WATCH
98 if(oldPtr == freeWatchAddrs) {
99 printf("====frealloc watchpoint (0x%x) hit\n",
100 (unsigned)freeWatchAddrs);
101 }
102 #endif
103 if(reallocExt != NULL) {
104 return (reallocExt)(oldPtr, newSize);
105 }
106 else {
107 return realloc(oldPtr, newSize);
108 }
109 }