]> git.proxmox.com Git - rustc.git/blob - vendor/object/src/archive.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / vendor / object / src / archive.rs
1 //! Archive definitions.
2 //!
3 //! These definitions are independent of read/write support, although we do implement
4 //! some traits useful for those.
5
6 use crate::pod::Pod;
7
8 /// File identification bytes stored at the beginning of the file.
9 pub const MAGIC: [u8; 8] = *b"!<arch>\n";
10
11 /// File identification bytes at the beginning of AIX big archive.
12 pub const AIX_BIG_MAGIC: [u8; 8] = *b"<bigaf>\n";
13
14 /// File identification bytes stored at the beginning of a thin archive.
15 ///
16 /// A thin archive only contains a symbol table and file names.
17 pub const THIN_MAGIC: [u8; 8] = *b"!<thin>\n";
18
19 /// The terminator for each archive member header.
20 pub const TERMINATOR: [u8; 2] = *b"`\n";
21
22 /// The header at the start of an archive member.
23 #[derive(Debug, Clone, Copy)]
24 #[repr(C)]
25 pub struct Header {
26 /// The file name.
27 pub name: [u8; 16],
28 /// File modification timestamp in decimal.
29 pub date: [u8; 12],
30 /// User ID in decimal.
31 pub uid: [u8; 6],
32 /// Group ID in decimal.
33 pub gid: [u8; 6],
34 /// File mode in octal.
35 pub mode: [u8; 8],
36 /// File size in decimal.
37 pub size: [u8; 10],
38 /// Must be equal to `TERMINATOR`.
39 pub terminator: [u8; 2],
40 }
41
42 /// The header at the start of an AIX big archive member, without name.
43 #[derive(Debug, Clone, Copy)]
44 #[repr(C)]
45 pub struct AixHeader {
46 /// File member size in decimal.
47 pub size: [u8; 20],
48 /// Next member offset in decimal.
49 pub nxtmem: [u8; 20],
50 /// Previous member offset in decimal.
51 pub prvmem: [u8; 20],
52 /// File member date in decimal.
53 pub date: [u8; 12],
54 /// File member user id in decimal.
55 pub uid: [u8; 12],
56 /// File member group id in decimal.
57 pub gid: [u8; 12],
58 /// File member mode in octal.
59 pub mode: [u8; 12],
60 /// File member name length in decimal.
61 pub namlen: [u8; 4],
62 }
63
64 /// The AIX big archive's fixed length header at file beginning.
65 #[derive(Debug, Clone, Copy)]
66 #[repr(C)]
67 pub struct AixFileHeader {
68 /// Archive magic string.
69 pub magic: [u8; 8],
70 /// Offset of member table.
71 pub memoff: [u8; 20],
72 /// Offset of global symbol table.
73 pub gstoff: [u8; 20],
74 /// Offset of global symbol table for 64-bit objects.
75 pub gst64off: [u8; 20],
76 /// Offset of first member.
77 pub fstmoff: [u8; 20],
78 /// Offset of last member.
79 pub lstmoff: [u8; 20],
80 /// Offset of first member on free list.
81 pub freeoff: [u8; 20],
82 }
83
84 /// Offset of a member in an AIX big archive.
85 ///
86 /// This is used in the member index.
87 #[derive(Debug, Clone, Copy)]
88 #[repr(C)]
89 pub struct AixMemberOffset(pub [u8; 20]);
90
91 unsafe_impl_pod!(Header, AixHeader, AixFileHeader, AixMemberOffset,);