Git fork
at reftables-rust 79 lines 2.0 kB view raw
1use std::ffi::c_void; 2 3#[cfg(has_std__ffi__c_char)] 4use std::ffi::{c_char, c_int}; 5 6#[cfg(not(has_std__ffi__c_char))] 7#[allow(non_camel_case_types)] 8pub type c_char = i8; 9 10#[cfg(not(has_std__ffi__c_char))] 11#[allow(non_camel_case_types)] 12pub type c_int = i32; 13 14extern crate libz_sys; 15 16#[allow(non_camel_case_types)] 17#[repr(C)] 18pub struct libgit_config_set { 19 _data: [u8; 0], 20 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>, 21} 22 23extern "C" { 24 pub fn free(ptr: *mut c_void); 25 26 pub fn libgit_user_agent() -> *const c_char; 27 pub fn libgit_user_agent_sanitized() -> *const c_char; 28 29 pub fn libgit_configset_alloc() -> *mut libgit_config_set; 30 pub fn libgit_configset_free(cs: *mut libgit_config_set); 31 32 pub fn libgit_configset_add_file(cs: *mut libgit_config_set, filename: *const c_char) -> c_int; 33 34 pub fn libgit_configset_get_int( 35 cs: *mut libgit_config_set, 36 key: *const c_char, 37 int: *mut c_int, 38 ) -> c_int; 39 40 pub fn libgit_configset_get_string( 41 cs: *mut libgit_config_set, 42 key: *const c_char, 43 dest: *mut *mut c_char, 44 ) -> c_int; 45 46} 47 48#[cfg(test)] 49mod tests { 50 use std::ffi::CStr; 51 52 use super::*; 53 54 #[test] 55 fn user_agent_starts_with_git() { 56 let c_str = unsafe { CStr::from_ptr(libgit_user_agent()) }; 57 let agent = c_str 58 .to_str() 59 .expect("User agent contains invalid UTF-8 data"); 60 assert!( 61 agent.starts_with("git/"), 62 r#"Expected user agent to start with "git/", got: {}"#, 63 agent 64 ); 65 } 66 67 #[test] 68 fn sanitized_user_agent_starts_with_git() { 69 let c_str = unsafe { CStr::from_ptr(libgit_user_agent_sanitized()) }; 70 let agent = c_str 71 .to_str() 72 .expect("Sanitized user agent contains invalid UTF-8 data"); 73 assert!( 74 agent.starts_with("git/"), 75 r#"Expected user agent to start with "git/", got: {}"#, 76 agent 77 ); 78 } 79}