aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/terminal/c/allocator.zig
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-04-04 19:22:04 +0300
committerCan Celik <ogulcancelik@gmail.com>2026-04-05 01:23:06 +0300
commit41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch)
tree3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/src/terminal/c/allocator.zig
parent55c138263e190a1e79d4b997bfb9397306c0ec1f (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.zig67
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);
+}