Git fork
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}