Something went wrong. Try again.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960//! This contains convenience functions for allocating various types.//!//! The primary use case for this is Wasm builds. Ghostty relies a lot on//! pointers to various types for ABI compatibility and creating those pointers//! in Wasm is tedious. This file contains a purely additive set of functions//! that can be exposed to the Wasm module without changing the API from the//! C library.//!//! Given these are convenience methods, they always use the default allocator.//! If a caller is using a custom allocator, they have the expertise to//! allocate these types manually using their custom allocator.
// Get our default allocator at comptime since it is known.const default = @import("../allocator.zig").default;const alloc = default(null);
pub const Opaque = *anyopaque;
pub fn allocOpaque() callconv(.c) ?*Opaque { return alloc.create(*anyopaque) catch return null;}
pub fn freeOpaque(ptr: ?*Opaque) callconv(.c) void { if (ptr) |p| alloc.destroy(p);}
pub fn allocU8Array(len: usize) callconv(.c) ?[*]u8 { const slice = alloc.alloc(u8, len) catch return null; return slice.ptr;}
pub fn freeU8Array(ptr: ?[*]u8, len: usize) callconv(.c) void { if (ptr) |p| alloc.free(p[0..len]);}
pub fn allocU16Array(len: usize) callconv(.c) ?[*]u16 { const slice = alloc.alloc(u16, len) catch return null; return slice.ptr;}
pub fn freeU16Array(ptr: ?[*]u16, len: usize) callconv(.c) void { if (ptr) |p| alloc.free(p[0..len]);}
pub fn allocU8() callconv(.c) ?*u8 { return alloc.create(u8) catch return null;}
pub fn freeU8(ptr: ?*u8) callconv(.c) void { if (ptr) |p| alloc.destroy(p);}
pub fn allocUsize() callconv(.c) ?*usize { return alloc.create(usize) catch return null;}
pub fn freeUsize(ptr: ?*usize) callconv(.c) void { if (ptr) |p| alloc.destroy(p);}