Fix std-pcap: guard foreign-procedure forms, absolute-path dylib fallback, bv-sub helper
ober
c75516f96d58b0fbf8b27e256240e4e4fe589c57
--- a/Makefile +++ b/Makefile @@ -351,7 +351,7 @@ endif RUST_NATIVE_LIB = $(RUST_NATIVE_DIR)/target/release/libjerboa_native.$(NATIVE_LIB_EXT) $(RUST_NATIVE_LIB): $(RUST_NATIVE_DIR)/src/*.rs $(RUST_NATIVE_DIR)/Cargo.toml - cd $(RUST_NATIVE_DIR) && cargo build --release + cd $(RUST_NATIVE_DIR) && cargo build --release --features full native: $(RUST_NATIVE_LIB) cp $(RUST_NATIVE_LIB) lib/ --- a/lib/std/pcap.sls +++ b/lib/std/pcap.sls @@ -44,7 +44,8 @@ #t) #f))) - (define (pcap-available?) _loaded) + ;; True only when the dylib loaded AND symbols resolved + (define (pcap-available?) (and _loaded (procedure? c-pcap-open))) ;; ── Sub-bytevector helper (bytevector-copy in Chez takes 1 arg, not 3) ──── @@ -54,22 +55,29 @@ out)) ;; ── FFI declarations ────────────────────────────────────────────────────── + ;; foreign-procedure is eager in Chez — guard each one so a missing dylib + ;; yields #f instead of crashing library initialisation. (define c-pcap-open - (foreign-procedure "jerboa_pcap_open" (u8* size_t) integer-64)) + (guard (e [#t #f]) + (foreign-procedure "jerboa_pcap_open" (u8* size_t) integer-64))) (define c-pcap-next - (foreign-procedure "jerboa_pcap_next" - (integer-64 u8* size_t u8* u8*) int)) + (guard (e [#t #f]) + (foreign-procedure "jerboa_pcap_next" + (integer-64 u8* size_t u8* u8*) int))) (define c-pcap-close - (foreign-procedure "jerboa_pcap_close" (integer-64) int)) + (guard (e [#t #f]) + (foreign-procedure "jerboa_pcap_close" (integer-64) int))) (define c-pcap-list-interfaces - (foreign-procedure "jerboa_pcap_list_interfaces" (u8* size_t) int)) + (guard (e [#t #f]) + (foreign-procedure "jerboa_pcap_list_interfaces" (u8* size_t) int))) (define c-last-error - (foreign-procedure "jerboa_last_error" (u8* size_t) size_t)) + (guard (e [#t #f]) + (foreign-procedure "jerboa_last_error" (u8* size_t) size_t))) ;; ── Error helper ─────────────────────────────────────────────────────────