From 0c873440af248f860ea928e4ac39d857cc54dfb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 2 Feb 2026 20:07:03 +0100 Subject: [PATCH 1/3] Two fixes for 32 bit builds. --- src/x.zig | 2 +- src/x/draft.zig | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/x.zig b/src/x.zig index c083686..01b6fae 100644 --- a/src/x.zig +++ b/src/x.zig @@ -4323,7 +4323,7 @@ pub const Source = struct { .reply => |*reply_state| { const remaining = reply_state.remaining(); std.debug.assert(remaining > 0); - try source.reader.discardAll(remaining); + try source.reader.discardAll(@intCast(remaining)); source.state = .kind; }, .err => return, diff --git a/src/x/draft.zig b/src/x/draft.zig index 1cfa821..be250ad 100644 --- a/src/x/draft.zig +++ b/src/x/draft.zig @@ -151,7 +151,10 @@ pub fn readSetupDynamic( } const vendor_written = old_remaining - source.replyRemainingSize(); const vendor_remaining = setup.vendor_len - vendor_written; - try source.replyDiscard(vendor_remaining + x11.pad4Len(@truncate(setup.vendor_len))); + const vendor_remaining_bytes: usize = @intCast( + vendor_remaining + x11.pad4Len(@truncate(setup.vendor_len)), + ); + try source.replyDiscard(vendor_remaining_bytes); } for (0..setup.format_count) |index| { From 81c84809f5e2836d9a5af15b251092ae99b559c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 2 Feb 2026 20:25:04 +0100 Subject: [PATCH 2/3] Fixes 32 bit builds. --- examples/fontviewer.zig | 7 ++++--- examples/getserverfontnames.zig | 2 +- examples/testexample.zig | 4 ++-- src/x.zig | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/fontviewer.zig b/examples/fontviewer.zig index 0d3810e..d9c653a 100644 --- a/examples/fontviewer.zig +++ b/examples/fontviewer.zig @@ -96,10 +96,11 @@ pub fn main() !u8 { const list, _ = try source.readSynchronousReplyHeader(sink.sequence, .ListFonts); std.log.info("font count {}", .{list.count}); const remaining_size = source.replyRemainingSize(); - const font_mem = try allocator.alloc(u8, remaining_size); + const font_mem = try allocator.alloc(u8, @intCast(remaining_size)); try source.readReply(font_mem); const fonts = try allocator.alloc(x11.Slice(u8, [*]const u8), list.count); - var font_mem_index: u34 = 0; + var font_mem_index: usize = 0; + for (fonts.ptr[0..list.count]) |*font| { if (font_mem_index == font_mem.len) @panic("fonts truncated"); const len = font_mem[font_mem_index]; @@ -320,7 +321,7 @@ const State = struct { "msg size is {} but fields require {}", .{ msg_remaining_size, required_remaining_size }, ); - try source.replyDiscard(msg_remaining_size); + try source.replyDiscard(@intCast(msg_remaining_size)); const font_info: FontInfo = .{ .font_ascent = font.font_ascent, .font_descent = font.font_descent, diff --git a/examples/getserverfontnames.zig b/examples/getserverfontnames.zig index 706e428..5232f76 100644 --- a/examples/getserverfontnames.zig +++ b/examples/getserverfontnames.zig @@ -48,7 +48,7 @@ pub fn main() !void { } const remaining = source.replyRemainingSize(); std.log.info("discarding remaining {} bytes...", .{remaining}); - try source.replyDiscard(remaining); + try source.replyDiscard(@intCast(remaining)); try stdout.flush(); } diff --git a/examples/testexample.zig b/examples/testexample.zig index 57cb47b..cb54074 100644 --- a/examples/testexample.zig +++ b/examples/testexample.zig @@ -335,7 +335,7 @@ pub fn main() !u8 { } } // NOTE: there is stil two more lists we could read - try source.replyDiscard(source.replyRemainingSize()); + try source.replyDiscard(@intCast(source.replyRemainingSize())); if (maybe_picture_format) |format| { std.log.info("using format {f}", .{format}); @@ -810,7 +810,7 @@ fn checkTestImageIsDrawnToWindow( const log_image = false; - for (0..image_size / 4) |_| { + for (0..@intCast(image_size / 4)) |_| { if (width_index >= test_image.width) { // For Debugging: Print a newline after each row if (log_image) std.debug.print("\n", .{}); diff --git a/src/x.zig b/src/x.zig index 01b6fae..8bf4d06 100644 --- a/src/x.zig +++ b/src/x.zig @@ -4535,7 +4535,7 @@ pub const Source = struct { }; const total = reply_state.total(); std.debug.assert(reply_state.taken + n <= total); - const data = try source.reader.take(n); + const data = try source.reader.take(@intCast(n)); reply_state.taken += @intCast(data.len); if (reply_state.taken == total) { source.state = .kind; From b2dbce082f174d662a825e93e66a2628e710c619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 2 Feb 2026 20:28:31 +0100 Subject: [PATCH 3/3] Enables CI for several platforms --- .github/workflows/build.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..f740795 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,34 @@ +name: Build + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + target: + - arm-linux-musl + - x86-linux-musl + - aarch64-linux-musl + - x86_64-linux-musl + - x86_64-macos + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 + + - name: Setup Zig + uses: mlugg/setup-zig@v2 + with: + version: "0.15.2" + + - name: Build ${{ matrix.target }} + run: | + zig build -Dtarget=${{ matrix.target }}