From 8dff08ae2f5ce17196d4828ddba1bca2227c65b9 Mon Sep 17 00:00:00 2001 From: aleksandarskrbic Date: Sun, 23 Nov 2025 00:14:42 +0100 Subject: [PATCH] feat(ffi): do not panic in visit_scan_metadata --- ffi/examples/read-table/read_table.c | 6 +++++- ffi/src/scan.rs | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ffi/examples/read-table/read_table.c b/ffi/examples/read-table/read_table.c index 2fc992aef9..642d3f4778 100644 --- a/ffi/examples/read-table/read_table.c +++ b/ffi/examples/read-table/read_table.c @@ -110,7 +110,11 @@ void do_visit_scan_metadata(void* engine_context, HandleSharedScanMetadata scan_ // Ask kernel to iterate each individual file and call us back with extracted metadata print_diag("Asking kernel to call us back for each scan row (file to read)\n"); - visit_scan_metadata(scan_metadata, engine_context, scan_row_callback); + ExternResultNullableCvoid result = visit_scan_metadata(scan_metadata, context->engine, engine_context, scan_row_callback); + if (result.tag != OkNullableCvoid) { + printf("Error visiting scan metadata\n"); + exit(-1); + } free_bool_slice(selection_vector); free_scan_metadata(scan_metadata); } diff --git a/ffi/src/scan.rs b/ffi/src/scan.rs index 0b6165f985..fd7e059117 100644 --- a/ffi/src/scan.rs +++ b/ffi/src/scan.rs @@ -499,19 +499,21 @@ struct ContextWrapper { #[no_mangle] pub unsafe extern "C" fn visit_scan_metadata( scan_metadata: Handle, + engine: Handle, engine_context: NullableCvoid, callback: CScanCallback, -) { +) -> ExternResult { + let engine = unsafe { engine.as_ref() }; let scan_metadata = unsafe { scan_metadata.as_ref() }; let context_wrapper = ContextWrapper { engine_context, callback, }; - // TODO: return ExternResult to caller instead of panicking? scan_metadata .visit_scan_files(context_wrapper, rust_callback) - .unwrap(); + .map(|_| None) + .into_extern_result(&engine) } #[cfg(test)]