| use std::ffi::c_void; |
| |
| #[cfg(has_std__ffi__c_char)] |
| use std::ffi::{c_char, c_int}; |
| |
| #[cfg(not(has_std__ffi__c_char))] |
| #[allow(non_camel_case_types)] |
| pub type c_char = i8; |
| |
| #[cfg(not(has_std__ffi__c_char))] |
| #[allow(non_camel_case_types)] |
| pub type c_int = i32; |
| |
| extern crate libz_sys; |
| |
| #[allow(non_camel_case_types)] |
| #[repr(C)] |
| pub struct libgit_config_set { |
| _data: [u8; 0], |
| _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>, |
| } |
| |
| extern "C" { |
| pub fn free(ptr: *mut c_void); |
| |
| pub fn libgit_user_agent() -> *const c_char; |
| pub fn libgit_user_agent_sanitized() -> *const c_char; |
| |
| pub fn libgit_configset_alloc() -> *mut libgit_config_set; |
| pub fn libgit_configset_free(cs: *mut libgit_config_set); |
| |
| pub fn libgit_configset_add_file(cs: *mut libgit_config_set, filename: *const c_char) -> c_int; |
| |
| pub fn libgit_configset_get_int( |
| cs: *mut libgit_config_set, |
| key: *const c_char, |
| int: *mut c_int, |
| ) -> c_int; |
| |
| pub fn libgit_configset_get_string( |
| cs: *mut libgit_config_set, |
| key: *const c_char, |
| dest: *mut *mut c_char, |
| ) -> c_int; |
| |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use std::ffi::CStr; |
| |
| use super::*; |
| |
| #[test] |
| fn user_agent_starts_with_git() { |
| let c_str = unsafe { CStr::from_ptr(libgit_user_agent()) }; |
| let agent = c_str |
| .to_str() |
| .expect("User agent contains invalid UTF-8 data"); |
| assert!( |
| agent.starts_with("git/"), |
| r#"Expected user agent to start with "git/", got: {}"#, |
| agent |
| ); |
| } |
| |
| #[test] |
| fn sanitized_user_agent_starts_with_git() { |
| let c_str = unsafe { CStr::from_ptr(libgit_user_agent_sanitized()) }; |
| let agent = c_str |
| .to_str() |
| .expect("Sanitized user agent contains invalid UTF-8 data"); |
| assert!( |
| agent.starts_with("git/"), |
| r#"Expected user agent to start with "git/", got: {}"#, |
| agent |
| ); |
| } |
| } |