1
1
//! Bindings to libgit2's git_libgit2_opts function.
2
2
3
3
use std:: sync:: Mutex ;
4
+ use std:: ffi:: CString ;
4
5
5
6
use once_cell:: sync:: Lazy ;
6
7
@@ -41,7 +42,7 @@ impl SearchPath {
41
42
Ok ( ( ) )
42
43
}
43
44
44
- pub fn get ( & self , level : ConfigLevel ) -> Result < String , Error > {
45
+ pub fn get ( & self , level : ConfigLevel ) -> Result < CString , Error > {
45
46
let buf = Buf :: new ( ) ;
46
47
unsafe {
47
48
call:: c_try ( raw:: git_libgit2_opts (
@@ -50,7 +51,7 @@ impl SearchPath {
50
51
buf. raw ( ) ,
51
52
) ) ?;
52
53
}
53
- Ok ( buf. as_str ( ) . unwrap ( ) . to_string ( ) )
54
+ buf. into_c_string ( )
54
55
}
55
56
}
56
57
@@ -83,7 +84,7 @@ pub fn reset_search_path(level: ConfigLevel) -> Result<(), Error> {
83
84
///
84
85
/// `level` must be one of [`ConfigLevel::System`], [`ConfigLevel::Global`],
85
86
/// [`ConfigLevel::XDG`], [`ConfigLevel::ProgramData`].
86
- pub fn get_search_path ( level : ConfigLevel ) -> Result < String , Error > {
87
+ pub fn get_search_path ( level : ConfigLevel ) -> Result < CString , Error > {
87
88
SEARCH_PATH . lock ( ) . unwrap ( ) . get ( level)
88
89
}
89
90
@@ -134,15 +135,15 @@ mod test {
134
135
fn search_path ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
135
136
let path = "fake_path" ;
136
137
let original = get_search_path ( ConfigLevel :: Global ) ;
137
- assert_ne ! ( original, Ok ( path. into ( ) ) ) ;
138
+ assert_ne ! ( original, Ok ( path. into_c_string ( ) ? ) ) ;
138
139
139
140
// Set
140
141
set_search_path ( ConfigLevel :: Global , & path) ?;
141
- assert_eq ! ( get_search_path( ConfigLevel :: Global ) , Ok ( path. into ( ) ) ) ;
142
+ assert_eq ! ( get_search_path( ConfigLevel :: Global ) , Ok ( path. into_c_string ( ) ? ) ) ;
142
143
143
144
// Append
144
145
let paths = join_paths ( [ "$PATH" , path] . iter ( ) ) ?;
145
- let expected_paths = join_paths ( [ path, path] . iter ( ) ) ?. into_string ( ) . unwrap ( ) ;
146
+ let expected_paths = join_paths ( [ path, path] . iter ( ) ) ?. into_c_string ( ) ? ;
146
147
set_search_path ( ConfigLevel :: Global , paths) ?;
147
148
assert_eq ! ( get_search_path( ConfigLevel :: Global ) , Ok ( expected_paths) ) ;
148
149
0 commit comments