Fix std-pcap: guard foreign-procedure forms, absolute-path dylib fallback, bv-sub helper

ober

c75516f96d58b0fbf8b27e256240e4e4fe589c57

diff --git a/Makefile b/Makefile
index 33b533a..49e7003 100644
--- 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/
diff --git a/lib/std/pcap.sls b/lib/std/pcap.sls
index 5b7fb0d..5e70435 100644
--- 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 ─────────────────────────────────────────────────────────