Skip to content

Commit b82370c

Browse files
committed
std: fix stat struct of android (SEGV error from run-pass/stat.rs on android)
1 parent c4c7e0f commit b82370c

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

src/libstd/libc.rs

+49-1
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,8 @@ pub mod types {
257257
pub type intptr_t = int;
258258
pub type uintptr_t = uint;
259259
}
260+
#[cfg(target_arch = "x86")]
261+
#[cfg(target_arch = "mips")]
260262
pub mod posix88 {
261263
pub type off_t = i32;
262264
pub type dev_t = u64;
@@ -268,6 +270,20 @@ pub mod types {
268270
pub type mode_t = u32;
269271
pub type ssize_t = i32;
270272
}
273+
#[cfg(target_arch = "arm")]
274+
pub mod posix88 {
275+
pub type off_t = i32;
276+
pub type dev_t = u32;
277+
pub type ino_t = u32;
278+
pub type pid_t = i32;
279+
pub type uid_t = u32;
280+
pub type gid_t = u32;
281+
pub type useconds_t = u32;
282+
pub type mode_t = u16;
283+
pub type ssize_t = i32;
284+
}
285+
#[cfg(target_arch = "x86")]
286+
#[cfg(target_arch = "mips")]
271287
pub mod posix01 {
272288
use libc::types::os::arch::c95::{c_short, c_long, c_ulong, time_t};
273289
use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t};
@@ -279,7 +295,6 @@ pub mod types {
279295
pub type blkcnt_t = i32;
280296

281297
#[cfg(target_arch = "x86")]
282-
#[cfg(target_arch = "arm")]
283298
pub struct stat {
284299
st_dev: dev_t,
285300
__pad1: c_short,
@@ -327,6 +342,39 @@ pub mod types {
327342
st_pad5: [c_long, ..14],
328343
}
329344
}
345+
#[cfg(target_arch = "arm")]
346+
pub mod posix01 {
347+
use libc::types::os::arch::c95::{c_uchar, c_uint, c_ulong, time_t};
348+
use libc::types::os::arch::c99::{c_longlong, c_ulonglong};
349+
use libc::types::os::arch::posix88::{uid_t, gid_t, ino_t};
350+
use libc::types::os::arch::posix88::{uid_t};
351+
352+
pub type nlink_t = u16;
353+
pub type blksize_t = u32;
354+
pub type blkcnt_t = u32;
355+
356+
pub struct stat {
357+
st_dev: c_ulonglong,
358+
__pad0: [c_uchar, ..4],
359+
__st_ino: ino_t,
360+
st_mode: c_uint,
361+
st_nlink: c_uint,
362+
st_uid: uid_t,
363+
st_gid: gid_t,
364+
st_rdev: c_ulonglong,
365+
__pad3: [c_uchar, ..4],
366+
st_size: c_longlong,
367+
st_blksize: blksize_t,
368+
st_blocks: c_ulonglong,
369+
st_atime: time_t,
370+
st_atime_nsec: c_ulong,
371+
st_mtime: time_t,
372+
st_mtime_nsec: c_ulong,
373+
st_ctime: time_t,
374+
st_ctime_nsec: c_ulong,
375+
st_ino: c_ulonglong
376+
}
377+
}
330378
pub mod posix08 {}
331379
pub mod bsd44 {}
332380
pub mod extra {}

src/libstd/path.rs

+29-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ pub trait GenericPath {
128128
#[cfg(target_os = "android")]
129129
mod stat {
130130
#[cfg(target_arch = "x86")]
131-
#[cfg(target_arch = "arm")]
132131
pub mod arch {
133132
use libc;
134133

@@ -158,6 +157,35 @@ mod stat {
158157
}
159158
}
160159

160+
#[cfg(target_arch = "arm")]
161+
pub mod arch {
162+
use libc;
163+
164+
pub fn default_stat() -> libc::stat {
165+
libc::stat {
166+
st_dev: 0,
167+
__pad0: [0, ..4],
168+
__st_ino: 0,
169+
st_mode: 0,
170+
st_nlink: 0,
171+
st_uid: 0,
172+
st_gid: 0,
173+
st_rdev: 0,
174+
__pad3: [0, ..4],
175+
st_size: 0,
176+
st_blksize: 0,
177+
st_blocks: 0,
178+
st_atime: 0,
179+
st_atime_nsec: 0,
180+
st_mtime: 0,
181+
st_mtime_nsec: 0,
182+
st_ctime: 0,
183+
st_ctime_nsec: 0,
184+
st_ino: 0
185+
}
186+
}
187+
}
188+
161189
#[cfg(target_arch = "mips")]
162190
pub mod arch {
163191
use libc;

0 commit comments

Comments
 (0)