From fb6581345ec9ef764c90b5a1ab53304598ba4e68 Mon Sep 17 00:00:00 2001 From: Spencer Brower Date: Wed, 8 Jul 2026 16:45:57 -0400 Subject: [PATCH] feat: Removed allocations from `bind` and `connect`. --- zmq.odin | 10 ++++------ zmq_test.odin | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/zmq.odin b/zmq.odin index b055443..37deb74 100644 --- a/zmq.odin +++ b/zmq.odin @@ -125,14 +125,12 @@ close :: proc(s: Socket) -> Error { return _close(s) == 0 ? nil : last_error() } -bind :: proc(s: Socket, addr: string, allocator := context.temp_allocator) -> Error { - c := strings.clone_to_cstring(addr, allocator) - return _bind(s, c) == 0 ? nil : last_error() +bind :: proc(s: Socket, addr: cstring) -> Error { + return _bind(s, addr) == 0 ? nil : last_error() } -connect :: proc(s: Socket, addr: string, allocator := context.temp_allocator) -> Error { - c := strings.clone_to_cstring(addr, allocator) - return _connect(s, c) == 0 ? nil : last_error() +connect :: proc(s: Socket, addr: cstring) -> Error { + return _connect(s, addr) == 0 ? nil : last_error() } send :: proc { diff --git a/zmq_test.odin b/zmq_test.odin index 259c950..4a7f9fe 100644 --- a/zmq_test.odin +++ b/zmq_test.odin @@ -2,6 +2,7 @@ package zmq +import "base:runtime" import "core:testing" @(test) @@ -13,6 +14,38 @@ test_version :: proc(t: ^testing.T) { testing.expect_value(t, pa, 5) } +@(test) +test_connect_does_not_allocate_with_string_literals :: proc(t: ^testing.T) { + context.temp_allocator = runtime.panic_allocator() + + ctx := ctx_new() + defer ctx_term(ctx) + + srv, serr := socket(ctx, .REP) + testing.expect_value(t, serr, nil) + if serr != nil { + testing.fail_now(t, "Can't create server socket") + } + defer close(srv) + + if err := bind(srv, "inproc://echo"); err != nil { + testing.expect_value(t, err, nil) + testing.fail_now(t, "Can't bind server socket") + } + + cli, cerr := socket(ctx, .REQ) + testing.expect_value(t, cerr, nil) + if cerr != nil { + testing.fail_now(t, "Can't create client socket") + } + defer close(cli) + err := connect(cli, "inproc://echo") + testing.expect_value(t, err, nil) + if err != nil { + testing.fail_now(t, "Can't connect client to server") + } +} + @(test) test_simple_const_echo :: proc(t: ^testing.T) { ctx := ctx_new()