On 2024.08.08 07:52, Mike Hommey wrote: > On Wed, Aug 07, 2024 at 11:21:27AM -0700, Josh Steadmon wrote: > > Non-C external consumers of libgit.a have to redefine the `repository` > > object in their own language if they want to call > > initialize_repository() to ensure memory for the object is allocated > > correctly. This is not ideal for external consumers that have no need > > for the entire `the_repository` object but need to call other functions > > from an initialized repository. Therefore, add a friendly > > initialize_repository() wrapper without a `the_repository` pointer. > > Technically speaking, you don't really need this. > > You can define `repository` as an opaque type in Rust: > ``` > #[allow(non_camel_case_types)] > #[repr(C)] > pub struct repository([u8; 0]); > ``` > > And define `the_repository` as an extern symbol: > ``` > extern "C" { > pub static mut the_repository: *mut repository; > } > ``` > > Mike I've actually already done a refactor for V2 that will avoid using this patch entirely, but thank you for the pointer. We do something similar to opaquely wrap configset pointers in a later patch (we use an empty enum there, I'm not sure whether that approach or a zero-size array is preferred).