SecBuffer.c
1 // 2 // SecBuffer.c 3 // utilities 4 // 5 // Created by Mitch Adler on 3/6/15. 6 // Copyright © 2015 Apple Inc. All rights reserved. 7 // 8 9 #include <utilities/SecBuffer.h> 10 11 #include <strings.h> 12 13 #define stackBufferSizeLimit 2048 14 15 void PerformWithBuffer(size_t size, void (^operation)(size_t size, uint8_t *buffer)) { 16 if (size == 0) { 17 operation(0, NULL); 18 } else if (size <= stackBufferSizeLimit) { 19 uint8_t buffer[size]; 20 operation(size, buffer); 21 } else { 22 uint8_t *buffer = malloc(size); 23 24 operation(size, buffer); 25 26 if (buffer) 27 free(buffer); 28 } 29 } 30 31 void PerformWithBufferAndClear(size_t size, void (^operation)(size_t size, uint8_t *buffer)) { 32 PerformWithBuffer(size, ^(size_t buf_size, uint8_t *buffer) { 33 operation(buf_size, buffer); 34 35 bzero(buffer, buf_size); 36 }); 37 }