@@ -226,10 +226,13 @@ impl<'a> ArchiveBuilder<'a> {
226
226
}
227
227
228
228
fn build_with_llvm ( & mut self , kind : ArchiveKind ) -> io:: Result < ( ) > {
229
- let mut archives = Vec :: new ( ) ;
229
+ let removals = mem:: replace ( & mut self . removals , Vec :: new ( ) ) ;
230
+ let mut additions = mem:: replace ( & mut self . additions , Vec :: new ( ) ) ;
230
231
let mut strings = Vec :: new ( ) ;
231
232
let mut members = Vec :: new ( ) ;
232
- let removals = mem:: replace ( & mut self . removals , Vec :: new ( ) ) ;
233
+
234
+ let dst = CString :: new ( self . config . dst . to_str ( ) . unwrap ( ) ) ?;
235
+ let should_update_symbols = self . should_update_symbols ;
233
236
234
237
unsafe {
235
238
if let Some ( archive) = self . src_archive ( ) {
@@ -250,18 +253,18 @@ impl<'a> ArchiveBuilder<'a> {
250
253
strings. push ( name) ;
251
254
}
252
255
}
253
- for addition in mem :: replace ( & mut self . additions , Vec :: new ( ) ) {
256
+ for addition in & mut additions {
254
257
match addition {
255
258
Addition :: File { path, name_in_archive } => {
256
259
let path = CString :: new ( path. to_str ( ) . unwrap ( ) ) ?;
257
- let name = CString :: new ( name_in_archive) ?;
260
+ let name = CString :: new ( name_in_archive. clone ( ) ) ?;
258
261
members. push ( llvm:: LLVMRustArchiveMemberNew ( path. as_ptr ( ) ,
259
262
name. as_ptr ( ) ,
260
263
None ) ) ;
261
264
strings. push ( path) ;
262
265
strings. push ( name) ;
263
266
}
264
- Addition :: Archive { archive, mut skip } => {
267
+ Addition :: Archive { archive, skip } => {
265
268
for child in archive. iter ( ) {
266
269
let child = child. map_err ( string_to_io_error) ?;
267
270
if !is_relevant_child ( & child) {
@@ -288,17 +291,14 @@ impl<'a> ArchiveBuilder<'a> {
288
291
members. push ( m) ;
289
292
strings. push ( name) ;
290
293
}
291
- archives. push ( archive) ;
292
294
}
293
295
}
294
296
}
295
297
296
- let dst = self . config . dst . to_str ( ) . unwrap ( ) . as_bytes ( ) ;
297
- let dst = CString :: new ( dst) ?;
298
298
let r = llvm:: LLVMRustWriteArchive ( dst. as_ptr ( ) ,
299
299
members. len ( ) as libc:: size_t ,
300
- members. as_ptr ( ) ,
301
- self . should_update_symbols ,
300
+ members. as_ptr ( ) as * const & _ ,
301
+ should_update_symbols,
302
302
kind) ;
303
303
let ret = if r. into_result ( ) . is_err ( ) {
304
304
let err = llvm:: LLVMRustGetLastError ( ) ;
0 commit comments