]> git.saurik.com Git - apple/security.git/blobdiff - OSX/utilities/SecBuffer.c
Security-59306.11.20.tar.gz
[apple/security.git] / OSX / utilities / SecBuffer.c
diff --git a/OSX/utilities/SecBuffer.c b/OSX/utilities/SecBuffer.c
new file mode 100644 (file)
index 0000000..4971578
--- /dev/null
@@ -0,0 +1,37 @@
+//
+//  SecBuffer.c
+//  utilities
+//
+//  Created by Mitch Adler on 3/6/15.
+//  Copyright © 2015 Apple Inc. All rights reserved.
+//
+
+#include <utilities/SecBuffer.h>
+
+#include <strings.h>
+
+#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);
+    });
+}