From 8a1dc5bd9763fb537606a690fadc5103a1384df8 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 27 Sep 2025 13:20:50 -0700 Subject: [PATCH] terminal: shuffle some C APIs to make it more long term maintainable --- src/terminal/c/main.zig | 12 +++++++++++ src/terminal/{c_api.zig => c/osc.zig} | 29 +++++++++------------------ src/terminal/c/result.zig | 5 +++++ src/terminal/main.zig | 2 +- 4 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 src/terminal/c/main.zig rename src/terminal/{c_api.zig => c/osc.zig} (61%) create mode 100644 src/terminal/c/result.zig diff --git a/src/terminal/c/main.zig b/src/terminal/c/main.zig new file mode 100644 index 000000000..fa1fd0c6a --- /dev/null +++ b/src/terminal/c/main.zig @@ -0,0 +1,12 @@ +pub const osc = @import("osc.zig"); + +// The full C API, unexported. +pub const osc_new = osc.new; +pub const osc_free = osc.free; + +test { + _ = osc; + + // We want to make sure we run the tests for the C allocator interface. + _ = @import("../../lib/allocator.zig"); +} diff --git a/src/terminal/c_api.zig b/src/terminal/c/osc.zig similarity index 61% rename from src/terminal/c_api.zig rename to src/terminal/c/osc.zig index 194a91d6d..e0024bc17 100644 --- a/src/terminal/c_api.zig +++ b/src/terminal/c/osc.zig @@ -1,22 +1,17 @@ const std = @import("std"); const assert = std.debug.assert; const builtin = @import("builtin"); -const lib_alloc = @import("../lib/allocator.zig"); +const lib_alloc = @import("../../lib/allocator.zig"); const CAllocator = lib_alloc.Allocator; -const osc = @import("osc.zig"); +const osc = @import("../osc.zig"); +const Result = @import("result.zig").Result; /// C: GhosttyOscParser -pub const OscParser = ?*osc.Parser; +pub const Parser = ?*osc.Parser; -/// C: GhosttyResult -pub const Result = enum(c_int) { - success = 0, - out_of_memory = -1, -}; - -pub fn osc_new( +pub fn new( alloc_: ?*const CAllocator, - result: *OscParser, + result: *Parser, ) callconv(.c) Result { const alloc = lib_alloc.default(alloc_); const ptr = alloc.create(osc.Parser) catch @@ -26,7 +21,7 @@ pub fn osc_new( return .success; } -pub fn osc_free(parser_: OscParser) callconv(.c) void { +pub fn free(parser_: Parser) callconv(.c) void { // C-built parsers always have an associated allocator. const parser = parser_ orelse return; const alloc = parser.alloc.?; @@ -34,16 +29,12 @@ pub fn osc_free(parser_: OscParser) callconv(.c) void { alloc.destroy(parser); } -test { - _ = lib_alloc; -} - test "osc" { const testing = std.testing; - var p: OscParser = undefined; - try testing.expectEqual(Result.success, osc_new( + var p: Parser = undefined; + try testing.expectEqual(Result.success, new( &lib_alloc.test_allocator, &p, )); - osc_free(p); + free(p); } diff --git a/src/terminal/c/result.zig b/src/terminal/c/result.zig new file mode 100644 index 000000000..a2ebc9b69 --- /dev/null +++ b/src/terminal/c/result.zig @@ -0,0 +1,5 @@ +/// C: GhosttyResult +pub const Result = enum(c_int) { + success = 0, + out_of_memory = -1, +}; diff --git a/src/terminal/main.zig b/src/terminal/main.zig index 4064c0c9c..832fe6a29 100644 --- a/src/terminal/main.zig +++ b/src/terminal/main.zig @@ -64,7 +64,7 @@ pub const isSafePaste = sanitize.isSafePaste; /// This is set to true when we're building the C library. pub const is_c_lib = @import("root") == @import("../lib_vt.zig"); -pub const c_api = @import("c_api.zig"); +pub const c_api = @import("c/main.zig"); test { @import("std").testing.refAllDecls(@This());