Skip to content

Commit e8db15f

Browse files
committed
Fix filename length for ar files
1 parent 103f2fa commit e8db15f

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

src/archive.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
3636
dst: output.to_path_buf(),
3737
src: input.map(|p| p.to_path_buf()),
3838
lib_search_paths: archive_search_paths(sess),
39-
is_like_osx: sess.target.target.options.is_like_osx,
39+
is_like_osx: true, //sess.target.target.options.is_like_osx,
4040
};
4141

4242
let (src_archives, entries) = if let Some(src) = &config.src {
@@ -146,8 +146,24 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
146146
ArchiveEntry::FromArchive { archive_index, entry_index } => {
147147
let entry = self.src_archives[archive_index].jump_to_entry(entry_index).unwrap();
148148
let orig_header = entry.header();
149+
150+
let orig_filename = orig_header.identifier().to_vec();
151+
152+
use std::collections::hash_map::DefaultHasher;
153+
use std::hash::{Hash, Hasher};
154+
let mut hasher = DefaultHasher::new();
155+
orig_filename.hash(&mut hasher);
156+
let mut filename = hasher.finish().to_le_bytes()[0..6].to_vec();
157+
filename.extend(&orig_filename[orig_filename.len() - 9..]);
158+
159+
assert!(
160+
filename.len() <= 16,
161+
"Filenames bigger than 16 bytes are not yet supported. Filename was: \"{}\"",
162+
String::from_utf8(filename).unwrap_or_else(|e| e.to_string()),
163+
);
164+
149165
let mut header =
150-
ar::Header::new(orig_header.identifier().to_vec(), orig_header.size());
166+
ar::Header::new(filename, orig_header.size());
151167
header.set_mtime(orig_header.mtime());
152168
header.set_uid(orig_header.uid());
153169
header.set_gid(orig_header.gid());

src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,14 +325,14 @@ impl CodegenBackend for CraneliftCodegenBackend {
325325
return Box::new(CodegenResults {
326326
crate_name: tcx.crate_name(LOCAL_CRATE),
327327
modules: vec![emit_module(
328-
"dummy_name",
328+
"u",
329329
ModuleKind::Regular,
330330
faerie_module,
331331
debug,
332332
)],
333333
allocator_module: if created_alloc_shim {
334334
Some(emit_module(
335-
"allocator_shim",
335+
"a",
336336
ModuleKind::Allocator,
337337
allocator_module,
338338
None,
@@ -341,7 +341,7 @@ impl CodegenBackend for CraneliftCodegenBackend {
341341
None
342342
},
343343
metadata_module: CompiledModule {
344-
name: "dummy_metadata".to_string(),
344+
name: "m".to_string(),
345345
kind: ModuleKind::Metadata,
346346
object: None,
347347
bytecode: None,

0 commit comments

Comments
 (0)