X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5dd5f9ec28f304ca377c42fd7f711d6cf12b90e1..5c19dc3ae3bd8e40a9c028b0deddd50ff337692c:/OSX/utilities/src/SecBuffer.c diff --git a/OSX/utilities/src/SecBuffer.c b/OSX/utilities/src/SecBuffer.c new file mode 100644 index 00000000..49715789 --- /dev/null +++ b/OSX/utilities/src/SecBuffer.c @@ -0,0 +1,37 @@ +// +// SecBuffer.c +// utilities +// +// Created by Mitch Adler on 3/6/15. +// Copyright © 2015 Apple Inc. All rights reserved. +// + +#include + +#include + +#define stackBufferSizeLimit 2048 + +void PerformWithBuffer(size_t size, void (^operation)(size_t size, uint8_t *buffer)) { + if (size == 0) { + operation(0, NULL); + } else if (size <= stackBufferSizeLimit) { + uint8_t buffer[size]; + operation(size, buffer); + } else { + uint8_t *buffer = malloc(size); + + operation(size, buffer); + + if (buffer) + free(buffer); + } +} + +void PerformWithBufferAndClear(size_t size, void (^operation)(size_t size, uint8_t *buffer)) { + PerformWithBuffer(size, ^(size_t size, uint8_t *buffer) { + operation(size, buffer); + + bzero(buffer, size); + }); +}