@@ -59,17 +59,7 @@ pub fn config(args: &Args) -> Result<()> {
59
59
. is_ok_and ( ExitStatus :: success) ;
60
60
ensure ! ( success, "could not run 'git'" ) ;
61
61
} else {
62
- let success = Command :: new ( "cp" )
63
- . args ( [
64
- "-P" , // preserve symlinks
65
- "-R" , // copy directories recursively
66
- afl_src_dir_str,
67
- & * tempdir. path ( ) . to_string_lossy ( ) ,
68
- ] )
69
- . status ( )
70
- . as_ref ( )
71
- . is_ok_and ( ExitStatus :: success) ;
72
- ensure ! ( success, "could not copy directory {afl_src_dir:?}" ) ;
62
+ copy_aflplusplus_submodule ( & tempdir. path ( ) . join ( AFL_SRC_PATH ) ) ?;
73
63
}
74
64
75
65
let work_dir = tempdir. path ( ) . join ( AFL_SRC_PATH ) ;
@@ -90,6 +80,30 @@ pub fn config(args: &Args) -> Result<()> {
90
80
Ok ( ( ) )
91
81
}
92
82
83
+ fn copy_aflplusplus_submodule ( aflplusplus_dir : & Path ) -> Result < ( ) > {
84
+ let afl_src_dir = Path :: new ( env ! ( "CARGO_MANIFEST_DIR" ) ) . join ( AFL_SRC_PATH ) ;
85
+ let afl_src_dir_str = & afl_src_dir. to_string_lossy ( ) ;
86
+
87
+ let Some ( aflplusplus_dir_parent) = aflplusplus_dir. parent ( ) else {
88
+ bail ! ( "could not get AFLplusplus dir parent" ) ;
89
+ } ;
90
+ debug_assert_eq ! ( aflplusplus_dir_parent. join( AFL_SRC_PATH ) , aflplusplus_dir) ;
91
+
92
+ let success = Command :: new ( "cp" )
93
+ . args ( [
94
+ "-P" , // preserve symlinks
95
+ "-R" , // copy directories recursively
96
+ afl_src_dir_str,
97
+ & * aflplusplus_dir_parent. to_string_lossy ( ) ,
98
+ ] )
99
+ . status ( )
100
+ . as_ref ( )
101
+ . is_ok_and ( ExitStatus :: success) ;
102
+ ensure ! ( success, "could not copy directory {afl_src_dir:?}" ) ;
103
+
104
+ Ok ( ( ) )
105
+ }
106
+
93
107
fn build_afl ( args : & Args , work_dir : & Path ) -> Result < ( ) > {
94
108
// if you had already installed cargo-afl previously you **must** clean AFL++
95
109
let afl_dir = common:: afl_dir ( ) ?;
0 commit comments