Skip to content

Commit c9fd181

Browse files
committed
musl: time64: change time_t type and structs
Change time_t type to i64 Change struct stat, msqid_ds and shmid_ds to reflect This commit follows upstream bminor/musl@3814333 and bminor/musl@d6dcfe4 It also implements a fix from bminor/musl@0fbd7d6
1 parent 67aef1c commit c9fd181

File tree

5 files changed

+393
-85
lines changed

5 files changed

+393
-85
lines changed

src/unix/linux_like/linux/musl/b32/arm/mod.rs

Lines changed: 79 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,33 @@ s! {
2020
pub st_blksize: crate::blksize_t,
2121
pub st_blocks: crate::blkcnt_t,
2222

23-
#[cfg(not(musl_v1_2_3))]
24-
pub st_atime: crate::time_t,
25-
#[cfg(not(musl_v1_2_3))]
26-
pub st_atime_nsec: c_long,
27-
#[cfg(not(musl_v1_2_3))]
28-
pub st_mtime: crate::time_t,
29-
#[cfg(not(musl_v1_2_3))]
30-
pub st_mtime_nsec: c_long,
31-
#[cfg(not(musl_v1_2_3))]
32-
pub st_ctime: crate::time_t,
33-
#[cfg(not(musl_v1_2_3))]
34-
pub st_ctime_nsec: c_long,
23+
#[cfg(musl32_time64)]
24+
__st_atim32: Padding<__c_anonymous_timespec32>,
25+
#[cfg(musl32_time64)]
26+
__st_mtim32: Padding<__c_anonymous_timespec32>,
27+
#[cfg(musl32_time64)]
28+
__st_ctim32: Padding<__c_anonymous_timespec32>,
3529

36-
#[cfg(musl_v1_2_3)]
30+
#[cfg(not(musl32_time64))]
3731
pub st_atime: crate::timespec,
38-
#[cfg(musl_v1_2_3)]
32+
#[cfg(not(musl32_time64))]
3933
pub st_mtime: crate::timespec,
40-
#[cfg(musl_v1_2_3)]
34+
#[cfg(not(musl32_time64))]
4135
pub st_ctime: crate::timespec,
4236

4337
pub st_ino: crate::ino_t,
38+
39+
#[cfg(musl32_time64)]
40+
pub st_atime: crate::timespec,
41+
#[cfg(musl32_time64)]
42+
pub st_mtime: crate::timespec,
43+
#[cfg(musl32_time64)]
44+
pub st_ctime: crate::timespec,
45+
}
46+
47+
struct __c_anonymous_timespec32 {
48+
__tv_sec: c_long,
49+
__tv_nsec: c_long,
4450
}
4551

4652
pub struct stack_t {
@@ -72,34 +78,92 @@ s! {
7278
pub struct shmid_ds {
7379
pub shm_perm: crate::ipc_perm,
7480
pub shm_segsz: size_t,
81+
82+
#[cfg(musl32_time64)]
83+
__shm_atime_lo: Padding<c_ulong>,
84+
#[cfg(musl32_time64)]
85+
__shm_atime_hi: Padding<c_ulong>,
86+
#[cfg(musl32_time64)]
87+
__shm_dtime_lo: Padding<c_ulong>,
88+
#[cfg(musl32_time64)]
89+
__shm_dtime_hi: Padding<c_ulong>,
90+
#[cfg(musl32_time64)]
91+
__msg_ctime_lo: Padding<c_ulong>,
92+
#[cfg(musl32_time64)]
93+
__msg_ctime_hi: Padding<c_ulong>,
94+
95+
#[cfg(not(musl32_time64))]
7596
pub shm_atime: crate::time_t,
97+
#[cfg(not(musl32_time64))]
7698
__unused1: Padding<c_int>,
99+
#[cfg(not(musl32_time64))]
77100
pub shm_dtime: crate::time_t,
101+
#[cfg(not(musl32_time64))]
78102
__unused2: Padding<c_int>,
103+
#[cfg(not(musl32_time64))]
79104
pub shm_ctime: crate::time_t,
105+
#[cfg(not(musl32_time64))]
80106
__unused3: Padding<c_int>,
107+
81108
pub shm_cpid: crate::pid_t,
82109
pub shm_lpid: crate::pid_t,
83110
pub shm_nattch: c_ulong,
84111
__pad1: Padding<c_ulong>,
85112
__pad2: Padding<c_ulong>,
113+
114+
#[cfg(musl32_time64)]
115+
__pad3: c_ulong,
116+
#[cfg(musl32_time64)]
117+
shm_atime: crate::time_t,
118+
#[cfg(musl32_time64)]
119+
shm_dtime: crate::time_t,
120+
#[cfg(musl32_time64)]
121+
shm_ctime: crate::time_t,
86122
}
87123

88124
pub struct msqid_ds {
89125
pub msg_perm: crate::ipc_perm,
126+
127+
#[cfg(musl32_time64)]
128+
__msg_stime_lo: Padding<c_ulong>,
129+
#[cfg(musl32_time64)]
130+
__msg_stime_hi: Padding<c_ulong>,
131+
#[cfg(musl32_time64)]
132+
__msg_rtime_lo: Padding<c_ulong>,
133+
#[cfg(musl32_time64)]
134+
__msg_rtime_hi: Padding<c_ulong>,
135+
#[cfg(musl32_time64)]
136+
__msg_ctime_lo: Padding<c_ulong>,
137+
#[cfg(musl32_time64)]
138+
__msg_ctime_hi: Padding<c_ulong>,
139+
140+
#[cfg(not(musl32_time64))]
90141
pub msg_stime: crate::time_t,
142+
#[cfg(not(musl32_time64))]
91143
__unused1: Padding<c_int>,
144+
#[cfg(not(musl32_time64))]
92145
pub msg_rtime: crate::time_t,
146+
#[cfg(not(musl32_time64))]
93147
__unused2: Padding<c_int>,
148+
#[cfg(not(musl32_time64))]
94149
pub msg_ctime: crate::time_t,
150+
#[cfg(not(musl32_time64))]
95151
__unused3: Padding<c_int>,
152+
96153
pub __msg_cbytes: c_ulong,
97154
pub msg_qnum: crate::msgqnum_t,
98155
pub msg_qbytes: crate::msglen_t,
99156
pub msg_lspid: crate::pid_t,
100157
pub msg_lrpid: crate::pid_t,
101158
__pad1: Padding<c_ulong>,
102159
__pad2: Padding<c_ulong>,
160+
161+
#[cfg(musl32_time64)]
162+
pub msg_stime: crate::time_t,
163+
#[cfg(musl32_time64)]
164+
pub msg_rtime: crate::time_t,
165+
#[cfg(musl32_time64)]
166+
pub msg_ctime: crate::time_t,
103167
}
104168

105169
pub struct mcontext_t {

src/unix/linux_like/linux/musl/b32/mips/mod.rs

Lines changed: 138 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,40 @@ s! {
1818
__st_padding2: Padding<[c_long; 2]>,
1919
pub st_size: off_t,
2020

21-
#[cfg(not(musl_v1_2_3))]
22-
pub st_atime: crate::time_t,
23-
#[cfg(not(musl_v1_2_3))]
24-
pub st_atime_nsec: c_long,
25-
#[cfg(not(musl_v1_2_3))]
26-
pub st_mtime: crate::time_t,
27-
#[cfg(not(musl_v1_2_3))]
28-
pub st_mtime_nsec: c_long,
29-
#[cfg(not(musl_v1_2_3))]
30-
pub st_ctime: crate::time_t,
31-
#[cfg(not(musl_v1_2_3))]
32-
pub st_ctime_nsec: c_long,
21+
#[cfg(musl32_time64)]
22+
__st_atim32: Padding<__c_anonymous_timespec32>,
23+
#[cfg(musl32_time64)]
24+
__st_mtim32: Padding<__c_anonymous_timespec32>,
25+
#[cfg(musl32_time64)]
26+
__st_ctim32: Padding<__c_anonymous_timespec32>,
3327

34-
#[cfg(musl_v1_2_3)]
28+
#[cfg(not(musl32_time64))]
3529
pub st_atime: crate::timespec,
36-
#[cfg(musl_v1_2_3)]
30+
#[cfg(not(musl32_time64))]
3731
pub st_mtime: crate::timespec,
38-
#[cfg(musl_v1_2_3)]
32+
#[cfg(not(musl32_time64))]
3933
pub st_ctime: crate::timespec,
4034

4135
pub st_blksize: crate::blksize_t,
4236
__st_padding3: Padding<c_long>,
4337
pub st_blocks: crate::blkcnt_t,
38+
#[cfg(not(musl32_time64))]
4439
__st_padding4: Padding<[c_long; 14]>,
40+
41+
#[cfg(musl32_time64)]
42+
pub st_atime: crate::timespec,
43+
#[cfg(musl32_time64)]
44+
pub st_mtime: crate::timespec,
45+
#[cfg(musl32_time64)]
46+
pub st_ctime: crate::timespec,
47+
48+
#[cfg(musl32_time64)]
49+
__st_padding4: Padding<[c_long; 2]>,
50+
}
51+
52+
struct __c_anonymous_timespec32 {
53+
__tv_sec: c_long,
54+
__tv_nsec: c_long,
4555
}
4656

4757
pub struct stack_t {
@@ -73,40 +83,40 @@ s! {
7383
pub struct shmid_ds {
7484
pub shm_perm: crate::ipc_perm,
7585
pub shm_segsz: size_t,
86+
#[cfg(not(musl32_time64))]
7687
pub shm_atime: crate::time_t,
88+
#[cfg(not(musl32_time64))]
7789
pub shm_dtime: crate::time_t,
90+
#[cfg(not(musl32_time64))]
7891
pub shm_ctime: crate::time_t,
92+
#[cfg(musl32_time64)]
93+
__shm_atime_lo: Padding<c_long>,
94+
#[cfg(musl32_time64)]
95+
__shm_dtime_lo: Padding<c_long>,
96+
#[cfg(musl32_time64)]
97+
__shm_ctime_lo: Padding<c_long>,
7998
pub shm_cpid: crate::pid_t,
8099
pub shm_lpid: crate::pid_t,
81100
pub shm_nattch: c_ulong,
101+
#[cfg(not(musl32_time64))]
82102
__pad1: Padding<c_ulong>,
103+
#[cfg(not(musl32_time64))]
83104
__pad2: Padding<c_ulong>,
84-
}
85105

86-
pub struct msqid_ds {
87-
pub msg_perm: crate::ipc_perm,
88-
#[cfg(target_endian = "big")]
89-
__unused1: Padding<c_int>,
90-
pub msg_stime: crate::time_t,
91-
#[cfg(target_endian = "little")]
92-
__unused1: Padding<c_int>,
93-
#[cfg(target_endian = "big")]
94-
__unused2: Padding<c_int>,
95-
pub msg_rtime: crate::time_t,
96-
#[cfg(target_endian = "little")]
97-
__unused2: Padding<c_int>,
98-
#[cfg(target_endian = "big")]
99-
__unused3: Padding<c_int>,
100-
pub msg_ctime: crate::time_t,
101-
#[cfg(target_endian = "little")]
102-
__unused3: Padding<c_int>,
103-
pub __msg_cbytes: c_ulong,
104-
pub msg_qnum: crate::msgqnum_t,
105-
pub msg_qbytes: crate::msglen_t,
106-
pub msg_lspid: crate::pid_t,
107-
pub msg_lrpid: crate::pid_t,
108-
__pad1: Padding<c_ulong>,
109-
__pad2: Padding<c_ulong>,
106+
#[cfg(musl32_time64)]
107+
__shm_atime_hi: Padding<c_ushort>,
108+
#[cfg(musl32_time64)]
109+
__shm_dtime_hi: Padding<c_ushort>,
110+
#[cfg(musl32_time64)]
111+
__shm_ctime_hi: Padding<c_ushort>,
112+
#[cfg(musl32_time64)]
113+
__pad1: Padding<c_ushort>,
114+
#[cfg(musl32_time64)]
115+
pub shm_atime: crate::time_t,
116+
#[cfg(musl32_time64)]
117+
pub shm_dtime: crate::time_t,
118+
#[cfg(musl32_time64)]
119+
pub shm_ctime: crate::time_t,
110120
}
111121

112122
pub struct statfs {
@@ -140,6 +150,94 @@ s! {
140150
}
141151
}
142152

153+
cfg_if! {
154+
if #[cfg(musl32_time64)] {
155+
s! {
156+
pub struct msqid_ds {
157+
pub msg_perm: crate::ipc_perm,
158+
159+
#[cfg(target_endian = "big")]
160+
__msg_stime_hi: Padding<c_ulong>,
161+
#[cfg(target_endian = "big")]
162+
__msg_stime_lo: Padding<c_ulong>,
163+
#[cfg(target_endian = "big")]
164+
__msg_rtime_hi: Padding<c_ulong>,
165+
#[cfg(target_endian = "big")]
166+
__msg_rtime_lo: Padding<c_ulong>,
167+
#[cfg(target_endian = "big")]
168+
__msg_ctime_hi: Padding<c_ulong>,
169+
#[cfg(target_endian = "big")]
170+
__msg_ctime_lo: Padding<c_ulong>,
171+
172+
#[cfg(target_endian = "little")]
173+
__msg_stime_lo: Padding<c_ulong>,
174+
#[cfg(target_endian = "little")]
175+
__msg_stime_hi: Padding<c_ulong>,
176+
#[cfg(target_endian = "little")]
177+
__msg_rtime_lo: Padding<c_ulong>,
178+
#[cfg(target_endian = "little")]
179+
__msg_rtime_hi: Padding<c_ulong>,
180+
#[cfg(target_endian = "little")]
181+
__msg_ctime_lo: Padding<c_ulong>,
182+
#[cfg(target_endian = "little")]
183+
__msg_ctime_hi: Padding<c_ulong>,
184+
185+
pub __msg_cbytes: c_ulong,
186+
pub msg_qnum: crate::msgqnum_t,
187+
pub msg_qbytes: crate::msglen_t,
188+
pub msg_lspid: crate::pid_t,
189+
pub msg_lrpid: crate::pid_t,
190+
__pad1: Padding<c_ulong>,
191+
__pad2: Padding<c_ulong>,
192+
193+
pub msg_stime: crate::time_t,
194+
pub msg_rtime: crate::time_t,
195+
pub msg_ctime: crate::time_t,
196+
}
197+
}
198+
} else {
199+
s! {
200+
pub struct msqid_ds {
201+
pub msg_perm: crate::ipc_perm,
202+
203+
#[cfg(target_endian = "big")]
204+
__unused1: Padding<c_int>,
205+
#[cfg(target_endian = "big")]
206+
pub msg_stime: crate::time_t,
207+
#[cfg(target_endian = "big")]
208+
__unused2: Padding<c_int>,
209+
#[cfg(target_endian = "big")]
210+
pub msg_rtime: crate::time_t,
211+
#[cfg(target_endian = "big")]
212+
__unused3: Padding<c_int>,
213+
#[cfg(target_endian = "big")]
214+
pub msg_ctime: crate::time_t,
215+
216+
#[cfg(target_endian = "little")]
217+
pub msg_stime: crate::time_t,
218+
#[cfg(target_endian = "little")]
219+
__unused1: Padding<c_int>,
220+
#[cfg(target_endian = "little")]
221+
pub msg_rtime: crate::time_t,
222+
#[cfg(target_endian = "little")]
223+
__unused2: Padding<c_int>,
224+
#[cfg(target_endian = "little")]
225+
pub msg_ctime: crate::time_t,
226+
#[cfg(target_endian = "little")]
227+
__unused3: Padding<c_int>,
228+
229+
pub __msg_cbytes: c_ulong,
230+
pub msg_qnum: crate::msgqnum_t,
231+
pub msg_qbytes: crate::msglen_t,
232+
pub msg_lspid: crate::pid_t,
233+
pub msg_lrpid: crate::pid_t,
234+
__pad1: Padding<c_ulong>,
235+
__pad2: Padding<c_ulong>,
236+
}
237+
}
238+
}
239+
}
240+
143241
s_no_extra_traits! {
144242
#[repr(align(8))]
145243
pub struct max_align_t {

0 commit comments

Comments
 (0)