X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/84aacf34eae6543be9f0280b2015385f91e5c2c6..b54c578e17e9bcbd74aa30ea75e25e955b9a6205:/OSX/utilities/SecBuffer.c?ds=inline diff --git a/OSX/utilities/SecBuffer.c b/OSX/utilities/SecBuffer.c new file mode 100644 index 00000000..49715789 --- /dev/null +++ b/OSX/utilities/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); + }); +}