SodiumPointer<T extends NativeType>.alloc constructor
SodiumPointer<T extends NativeType>.alloc (
- LibSodiumFFI sodium, {
- int count = 1,
- MemoryProtection memoryProtection = MemoryProtection.readWrite,
- bool zeroMemory = false,
Allocates new memory using the libsodium APIs.
The sodium parameter is the reference to the libsodium C API. By
default, the pointer will have a count of 1 - meaning it is exactly
sizeOf<T> bytes wide. If you set count to a higher value, it will be
sizeOf<T> * count.
If you want to immediately set the memoryProtection level, you can do so
by changing the parameter to a different value. By default, the pointer is
not protected and thus is writable.
By default, the memory is filled with 0xdb bytes. If you want to fill it
with 0x00 instead, simply set zeroMemory to true.
Internally, sodium_malloc or sodium_allocarray are used to allocate the memory.
See https://libsodium.gitbook.io/doc/memory_management#guarded-heap-allocations
Implementation
factory SodiumPointer.alloc(
LibSodiumFFI sodium, {
int count = 1,
MemoryProtection memoryProtection = MemoryProtection.readWrite,
bool zeroMemory = false,
}) {
RangeError.checkNotNegative(count, 'count');
final elementSize = _StaticallyTypedSizeOf.staticSizeOf<T>();
late final SodiumPointer<T> ptr;
if (count != 1) {
ptr = SodiumPointer.raw(
sodium,
sodium.sodium_allocarray(count, elementSize).cast(),
count,
);
} else {
ptr = SodiumPointer.raw(
sodium,
sodium.sodium_malloc(elementSize).cast(),
1,
);
}
try {
if (zeroMemory) {
ptr.zeroMemory();
}
return ptr..memoryProtection = memoryProtection;
} catch (e) {
ptr.dispose();
rethrow;
}
}