X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/67c7378dcb8de24c86b7fedff90b4b496f2e474c..5a719ac813caa6f2ceaa192274fad2e1c2cec162:/SecureTransport/sslMemory.cpp diff --git a/SecureTransport/sslMemory.cpp b/SecureTransport/sslMemory.cpp new file mode 100644 index 00000000..e2ace159 --- /dev/null +++ b/SecureTransport/sslMemory.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved. + * + * The contents of this file constitute Original Code as defined in and are + * subject to the Apple Public Source License Version 1.2 (the 'License'). + * You may not use this file except in compliance with the License. Please obtain + * a copy of the License at http://www.apple.com/publicsource and read it before + * using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS + * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the + * specific language governing rights and limitations under the License. + */ + + +/* + File: sslMemory.c + + Contains: memory allocator implementation + + Written by: Doug Mitchell + + Copyright: (c) 1999 by Apple Computer, Inc., all rights reserved. + +*/ + +#include "sslMemory.h" +#include "sslContext.h" +#include "sslDebug.h" + +#include + +#pragma mark *** Basic low-level malloc/free *** + +/* + * For now, all allocs/frees go thru here. + */ +#include /* memset */ +#include + +void * +sslMalloc(UInt32 length) +{ + return malloc(length); +} + +void +sslFree(void *p) +{ + if(p != nil) { + free(p); + } +} + +void * +sslRealloc(void *oldPtr, UInt32 oldLen, UInt32 newLen) +{ + return realloc(oldPtr, newLen); +} + +#pragma mark *** SSLBuffer-level alloc/free *** + +OSStatus SSLAllocBuffer( + SSLBuffer &buf, + UInt32 length, + const SSLContext *ctx) // currently unused +{ + buf.data = (UInt8 *)sslMalloc(length); + if(buf.data == NULL) { + buf.length = 0; + return memFullErr; + } + buf.length = length; + return noErr; +} + +OSStatus +SSLFreeBuffer(SSLBuffer &buf, const SSLContext *ctx) +{ + if(&buf == NULL) { + sslErrorLog("SSLFreeBuffer: NULL buf!\n"); + return errSSLInternal; + } + sslFree(buf.data); + buf.data = NULL; + buf.length = 0; + return noErr; +} + +OSStatus +SSLReallocBuffer(SSLBuffer &buf, UInt32 newSize, const SSLContext *ctx) +{ + buf.data = (UInt8 *)sslRealloc(buf.data, buf.length, newSize); + if(buf.data == NULL) { + buf.length = 0; + return memFullErr; + } + buf.length = newSize; + return noErr; +} + +#pragma mark *** Convenience routines *** + +UInt8 *sslAllocCopy( + const UInt8 *src, + UInt32 len) +{ + UInt8 *dst; + + dst = (UInt8 *)sslMalloc(len); + if(dst == NULL) { + return NULL; + } + memmove(dst, src, len); + return dst; +} + +OSStatus SSLAllocCopyBuffer( + const SSLBuffer &src, + SSLBuffer **dst) // buffer and data mallocd and returned +{ + OSStatus serr; + + SSLBuffer *rtn = (SSLBuffer *)sslMalloc(sizeof(SSLBuffer)); + if(rtn == NULL) { + return memFullErr; + } + serr = SSLCopyBuffer(src, *rtn); + if(serr) { + sslFree(rtn); + } + else { + *dst = rtn; + } + return serr; +} + +OSStatus SSLCopyBuffer( + const SSLBuffer &src, + SSLBuffer &dst) // data mallocd and returned +{ + dst.data = sslAllocCopy(src.data, src.length); + if(dst.data == NULL) { + return memFullErr; + } + dst.length = src.length; + return noErr; +}