1 | // Derived from code in LLVM, which is: |
2 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
3 | // See https://llvm.org/LICENSE.txt for license information. |
4 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
5 | |
6 | /// Size field is 10 decimal digits long |
7 | pub(crate) const MAX_MEMBER_SIZE: u64 = 9999999999; |
8 | |
9 | #[derive (Copy, Clone, Debug, PartialEq)] |
10 | pub enum ArchiveKind { |
11 | Gnu, |
12 | Gnu64, |
13 | Bsd, |
14 | Darwin, |
15 | Darwin64, |
16 | Coff, |
17 | AixBig, |
18 | } |
19 | |
20 | pub(crate) mod big_archive { |
21 | #[repr (C)] |
22 | pub(crate) struct BigArMemHdrType { |
23 | /// File member size in decimal |
24 | size: [u8; 20], |
25 | |
26 | /// Next member offset in decimal |
27 | next_offset: [u8; 20], |
28 | |
29 | /// Previous member offset in decimal |
30 | prev_offset: [u8; 20], |
31 | |
32 | last_modified: [u8; 12], |
33 | |
34 | uid: [u8; 12], |
35 | gid: [u8; 12], |
36 | |
37 | access_mode: [u8; 12], |
38 | |
39 | /// File member name length in decimal |
40 | name_len: [u8; 4], |
41 | |
42 | terminator: [u8; 2], |
43 | } |
44 | |
45 | /// Fixed-Length Header. |
46 | #[repr (C)] |
47 | pub(crate) struct FixLenHdr { |
48 | /// Big archive magic string. |
49 | magic: [u8; 8], |
50 | |
51 | /// Offset to member table. |
52 | mem_offset: [u8; 20], |
53 | |
54 | /// Offset to global symbol table. |
55 | glob_sym_offset: [u8; 20], |
56 | |
57 | /// Offset global symbol table for 64-bit objects. |
58 | glob_sym64_offset: [u8; 20], |
59 | |
60 | /// Offset to first archive member. |
61 | first_child_offset: [u8; 20], |
62 | |
63 | /// Offset to last archive member. |
64 | last_child_offset: [u8; 20], |
65 | |
66 | /// Offset to first mem on free list. |
67 | free_offset: [u8; 20], |
68 | } |
69 | } |
70 | |