mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-06-04 19:04:53 +00:00
Each C API file independently imported ../../lib/allocator.zig as lib_alloc. Now that terminal/lib.zig re-exports the allocator module as lib.alloc, use that instead. This removes the redundant import and keeps all lib dependencies flowing through the single lib.zig entry point.
68 lines
1.9 KiB
Zig
68 lines
1.9 KiB
Zig
const std = @import("std");
|
|
const testing = std.testing;
|
|
const lib = @import("../lib.zig");
|
|
const CAllocator = lib.alloc.Allocator;
|
|
|
|
/// Allocate a buffer of `len` bytes using the given allocator
|
|
/// (or the default allocator if NULL).
|
|
///
|
|
/// Returns a pointer to the allocated buffer, or NULL if the
|
|
/// allocation failed.
|
|
pub fn alloc(
|
|
alloc_: ?*const CAllocator,
|
|
len: usize,
|
|
) callconv(lib.calling_conv) ?[*]u8 {
|
|
const allocator = lib.alloc.default(alloc_);
|
|
const buf = allocator.alloc(u8, len) catch return null;
|
|
return buf.ptr;
|
|
}
|
|
|
|
/// Free memory that was allocated by a libghostty-vt function.
|
|
///
|
|
/// This must be used to free buffers returned by functions like
|
|
/// `format_alloc`. Pass the same allocator (or NULL for the default)
|
|
/// that was used for the allocation.
|
|
pub fn free(
|
|
alloc_: ?*const CAllocator,
|
|
ptr: ?[*]u8,
|
|
len: usize,
|
|
) callconv(lib.calling_conv) void {
|
|
const mem = ptr orelse return;
|
|
const allocator = lib.alloc.default(alloc_);
|
|
allocator.free(mem[0..len]);
|
|
}
|
|
|
|
test "alloc returns non-null" {
|
|
const ptr = alloc(&lib.alloc.test_allocator, 16);
|
|
try testing.expect(ptr != null);
|
|
free(&lib.alloc.test_allocator, ptr, 16);
|
|
}
|
|
|
|
test "alloc with null allocator" {
|
|
const ptr = alloc(null, 8);
|
|
try testing.expect(ptr != null);
|
|
free(null, ptr, 8);
|
|
}
|
|
|
|
test "alloc zero length" {
|
|
const ptr = alloc(&lib.alloc.test_allocator, 0);
|
|
defer free(&lib.alloc.test_allocator, ptr, 0);
|
|
}
|
|
|
|
test "free null pointer" {
|
|
free(&lib.alloc.test_allocator, null, 0);
|
|
}
|
|
|
|
test "free allocated memory" {
|
|
const allocator = lib.alloc.default(&lib.alloc.test_allocator);
|
|
const mem = try allocator.alloc(u8, 16);
|
|
free(&lib.alloc.test_allocator, mem.ptr, mem.len);
|
|
}
|
|
|
|
test "free with null allocator" {
|
|
// null allocator falls back to the default (test allocator in tests)
|
|
const allocator = lib.alloc.default(null);
|
|
const mem = try allocator.alloc(u8, 8);
|
|
free(null, mem.ptr, mem.len);
|
|
}
|