diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-04-04 19:22:04 +0300 |
|---|---|---|
| committer | Can Celik <ogulcancelik@gmail.com> | 2026-04-05 01:23:06 +0300 |
| commit | 41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch) | |
| tree | 3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/src/terminal/c/allocator.zig | |
| parent | 55c138263e190a1e79d4b997bfb9397306c0ec1f (diff) | |
feat: finish ghostty pane backend integration
Diffstat (limited to 'vendor/libghostty-vt/src/terminal/c/allocator.zig')
| -rw-r--r-- | vendor/libghostty-vt/src/terminal/c/allocator.zig | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/terminal/c/allocator.zig b/vendor/libghostty-vt/src/terminal/c/allocator.zig new file mode 100644 index 00000000..ca698f3c --- /dev/null +++ b/vendor/libghostty-vt/src/terminal/c/allocator.zig @@ -0,0 +1,67 @@ +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); +} |
