1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
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
);
}
}
|