ReviewOS

also looking at this

zig-utils/zig-test-framework

Add Windows support and CI coverage

#24
Merged glennmichael123 wants to merge codex/issue-6-windows-support into main
6 files +170 -266
src/main.zigmodified+17-10
Changes to src/main.zig
@@ -1,24 +1,30 @@
11const std = ;
2const builtin = ;
23const lib = ;
34const compat = lib.compat;
45
56// Global signal handler state
67var shutdown_requested = std.atomic.Value(bool).init(false);
78
8/// Signal handler for SIGINT and SIGTERM
9fn handleSignal(sig: std.posix.SIG) callconv(.c) void {
10 _ = sig;
11 shutdown_requested.store(true, .monotonic);
12 std.debug.print("\n\nShutdown requested... cleaning up\n", .{});
13}
14
159/// Install signal handlers
1610fn installSignalHandlers() !void {
11 // Windows console control events retain their native default behavior:
12 // Ctrl-C and console close terminate the CLI. POSIX platforms install
13 // cooperative handlers so long-running watch/UI modes can clean up.
14 if (comptime builtin.os.tag == .windows) return;
15
16 const Handler = struct {
17 fn handle(sig: std.posix.SIG) callconv(.c) void {
18 _ = sig;
19 shutdown_requested.store(true, .monotonic);
20 std.debug.print("\n\nShutdown requested... cleaning up\n", .{});
21 }
22 };
1723 const posix = std.posix;
1824
1925 // Install SIGINT handler (Ctrl+C)
2026 const sigint_action = posix.Sigaction{
21 .handler = .{ .handler = handleSignal },
27 .handler = .{ .handler = Handler.handle },
2228 .mask = posix.sigemptyset(),
2329 .flags = 0,
2430 };
@@ -26,7 +32,7 @@ fn installSignalHandlers() !void {
2632
2733 // Install SIGTERM handler
2834 const sigterm_action = posix.Sigaction{
29 .handler = .{ .handler = handleSignal },
35 .handler = .{ .handler = Handler.handle },
3036 .mask = posix.sigemptyset(),
3137 .flags = 0,
3238 };
@@ -52,7 +58,8 @@ pub fn main(init: std.process.Init.Minimal) !void {
5258 for (args_list.items) |arg| allocator.free(arg);
5359 args_list.deinit(allocator);
5460 }
55 var args_iter = std.process.Args.Iterator.init(init.args);
61 var args_iter = try std.process.Args.Iterator.initAllocator(init.args, allocator);
62 defer args_iter.deinit();
5663 while (args_iter.next()) |arg| {
5764 try args_list.append(allocator, try allocator.dupe(u8, arg));
5865 }