Merge pull request #194 from mneumann/dragonfly_fixes_2016_squashed
Fixed for DragonFly
diff --git a/libc-test/build.rs b/libc-test/build.rs
index 9c3b592..dab69ec 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -14,11 +14,12 @@
let apple = target.contains("apple");
let musl = target.contains("musl");
let freebsd = target.contains("freebsd");
+ let dragonfly = target.contains("dragonfly");
let mips = target.contains("mips");
let netbsd = target.contains("netbsd");
let openbsd = target.contains("openbsd");
let rumprun = target.contains("rumprun");
- let bsdlike = freebsd || apple || netbsd || openbsd;
+ let bsdlike = freebsd || apple || netbsd || openbsd || dragonfly;
let mut cfg = ctest::TestGenerator::new();
// Pull in extra goodies on linux/mingw
@@ -103,7 +104,7 @@
cfg.header("ifaddrs.h");
cfg.header("sys/statvfs.h");
- if !openbsd && !freebsd {
+ if !openbsd && !freebsd && !dragonfly {
cfg.header("sys/quota.h");
}
@@ -177,6 +178,12 @@
cfg.header("sys/syscall.h");
}
+ if dragonfly {
+ cfg.header("ufs/ufs/quota.h");
+ cfg.header("pthread_np.h");
+ cfg.header("sys/ioctl_compat.h");
+ }
+
cfg.type_name(move |ty, is_struct| {
match ty {
// Just pass all these through, no need for a "struct" prefix
@@ -254,12 +261,14 @@
}
});
- cfg.skip_signededness(|c| {
+ cfg.skip_signededness(move |c| {
match c {
"LARGE_INTEGER" |
"mach_timebase_info_data_t" |
"float" |
"double" => true,
+ // uuid_t is a struct, not an integer.
+ "uuid_t" if dragonfly => true,
n if n.starts_with("pthread") => true,
// windows-isms
@@ -321,7 +330,7 @@
"strerror_r" if linux => true, // actually xpg-something-or-other
// typed 2nd arg on linux and android
- "gettimeofday" if linux || android || freebsd || openbsd => true,
+ "gettimeofday" if linux || android || freebsd || openbsd || dragonfly => true,
// not declared in newer android toolchains
"getdtablesize" if android => true,
diff --git a/src/unix/bsd/freebsdlike/dragonfly.rs b/src/unix/bsd/freebsdlike/dragonfly.rs
deleted file mode 100644
index a06d232..0000000
--- a/src/unix/bsd/freebsdlike/dragonfly.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-pub type fsblkcnt_t = ::c_uint;
-pub type fsfilcnt_t = ::c_uint;
-
-pub const PTHREAD_STACK_MIN: ::size_t = 1024;
-pub const KERN_PROC_PATHNAME: ::c_int = 9;
-pub const SIGSTKSZ: ::size_t = 40960;
-pub const MADV_INVAL: ::c_int = 10;
-
-extern {
- pub fn __dfly_error() -> *const ::c_int;
-}
diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
new file mode 100644
index 0000000..768064d
--- /dev/null
+++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
@@ -0,0 +1,103 @@
+pub type clock_t = u64;
+pub type ino_t = u64;
+pub type nlink_t = u32;
+pub type blksize_t = i64;
+
+pub type c_long = i64;
+pub type c_ulong = u64;
+pub type time_t = i64;
+pub type suseconds_t = i64;
+
+s! {
+ pub struct dirent {
+ pub d_fileno: ::ino_t,
+ pub d_namlen: u16,
+ pub d_type: u8,
+ __unused1: u8,
+ __unused2: u32,
+ pub d_name: [::c_char; 256],
+ }
+
+ pub struct uuid {
+ pub time_low: u32,
+ pub time_mid: u16,
+ pub time_hi_and_version: u16,
+ pub clock_seq_hi_and_reserved: u8,
+ pub clock_seq_low: u8,
+ pub node: [u8; 6],
+ }
+
+ pub struct statvfs {
+ pub f_bsize: ::c_ulong,
+ pub f_frsize: ::c_ulong,
+ pub f_blocks: ::fsblkcnt_t,
+ pub f_bfree: ::fsblkcnt_t,
+ pub f_bavail: ::fsblkcnt_t,
+ pub f_files: ::fsfilcnt_t,
+ pub f_ffree: ::fsfilcnt_t,
+ pub f_favail: ::fsfilcnt_t,
+ pub f_fsid: ::c_ulong,
+ pub f_flag: ::c_ulong,
+ pub f_namemax: ::c_ulong,
+ pub f_owner: ::uid_t,
+ pub f_type: ::c_uint,
+ pub f_syncreads: u64,
+ pub f_syncwrites: u64,
+ pub f_asyncreads: u64,
+ pub f_asyncwrites: u64,
+ pub f_fsid_uuid: ::uuid_t,
+ pub f_uid_uuid: ::uuid_t,
+ }
+
+ pub struct stat {
+ pub st_ino: ::ino_t,
+ pub st_nlink: ::nlink_t,
+ pub st_dev: ::dev_t,
+ pub st_mode: ::mode_t,
+ pub st_padding1: ::uint16_t,
+ pub st_uid: ::uid_t,
+ pub st_gid: ::gid_t,
+ pub st_rdev: ::dev_t,
+ pub st_atime: ::time_t,
+ pub st_atime_nsec: ::c_long,
+ pub st_mtime: ::time_t,
+ pub st_mtime_nsec: ::c_long,
+ pub st_ctime: ::time_t,
+ pub st_ctime_nsec: ::c_long,
+ pub st_size: ::off_t,
+ pub st_blocks: ::int64_t,
+ pub st_blksize: ::uint32_t,
+ pub st_flags: ::uint32_t,
+ pub st_gen: ::uint32_t,
+ pub st_lspare: ::int32_t,
+ pub st_qspare1: ::int64_t,
+ pub st_qspare2: ::int64_t,
+ }
+}
+
+pub type uuid_t = ::uuid;
+
+pub type fsblkcnt_t = u64;
+pub type fsfilcnt_t = u64;
+
+pub const RAND_MAX: ::c_int = 0x7fff_ffff;
+pub const PTHREAD_STACK_MIN: ::size_t = 1024;
+pub const KERN_PROC_PATHNAME: ::c_int = 9;
+pub const SIGSTKSZ: ::size_t = 40960;
+pub const MADV_INVAL: ::c_int = 10;
+pub const O_CLOEXEC: ::c_int = 0x00020000;
+pub const F_GETLK: ::c_int = 7;
+pub const F_SETLK: ::c_int = 8;
+pub const F_SETLKW: ::c_int = 9;
+pub const ELAST: ::c_int = 99;
+pub const RLIMIT_POSIXLOCKS: ::c_int = 11;
+pub const RLIM_NLIMITS: ::rlim_t = 12;
+
+pub const Q_GETQUOTA: ::c_int = 0x300;
+pub const Q_SETQUOTA: ::c_int = 0x400;
+
+extern {
+ pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
+ -> ::c_int;
+ pub fn clock_gettime(clk_id: ::c_ulong, tp: *mut ::timespec) -> ::c_int;
+}
diff --git a/src/unix/bsd/freebsdlike/freebsd.rs b/src/unix/bsd/freebsdlike/freebsd.rs
deleted file mode 100644
index d6fa96f..0000000
--- a/src/unix/bsd/freebsdlike/freebsd.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-pub type fsblkcnt_t = ::uint64_t;
-pub type fsfilcnt_t = ::uint64_t;
-
-pub const PTHREAD_STACK_MIN: ::size_t = 2048;
-pub const KERN_PROC_PATHNAME: ::c_int = 12;
-pub const SIGSTKSZ: ::size_t = 34816;
-pub const SF_NODISKIO: ::c_int = 0x00000001;
-pub const SF_MNOWAIT: ::c_int = 0x00000002;
-pub const SF_SYNC: ::c_int = 0x00000004;
-
-extern {
- pub fn __error() -> *mut ::c_int;
-}
diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs
new file mode 100644
index 0000000..2c59a3e
--- /dev/null
+++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -0,0 +1,86 @@
+pub type fflags_t = u32;
+pub type clock_t = i32;
+pub type ino_t = u32;
+pub type nlink_t = u16;
+pub type blksize_t = u32;
+
+s! {
+ pub struct dirent {
+ pub d_fileno: u32,
+ pub d_reclen: u16,
+ pub d_type: u8,
+ pub d_namlen: u8,
+ pub d_name: [::c_char; 256],
+ }
+
+ pub struct statvfs {
+ pub f_bavail: ::fsblkcnt_t,
+ pub f_bfree: ::fsblkcnt_t,
+ pub f_blocks: ::fsblkcnt_t,
+ pub f_favail: ::fsfilcnt_t,
+ pub f_ffree: ::fsfilcnt_t,
+ pub f_files: ::fsfilcnt_t,
+ pub f_bsize: ::c_ulong,
+ pub f_flag: ::c_ulong,
+ pub f_frsize: ::c_ulong,
+ pub f_fsid: ::c_ulong,
+ pub f_namemax: ::c_ulong,
+ }
+}
+
+pub type fsblkcnt_t = ::uint64_t;
+pub type fsfilcnt_t = ::uint64_t;
+
+pub const RAND_MAX: ::c_int = 0x7fff_fffd;
+pub const PTHREAD_STACK_MIN: ::size_t = 2048;
+pub const KERN_PROC_PATHNAME: ::c_int = 12;
+pub const SIGSTKSZ: ::size_t = 34816;
+pub const SF_NODISKIO: ::c_int = 0x00000001;
+pub const SF_MNOWAIT: ::c_int = 0x00000002;
+pub const SF_SYNC: ::c_int = 0x00000004;
+pub const O_CLOEXEC: ::c_int = 0x00100000;
+pub const F_GETLK: ::c_int = 11;
+pub const F_SETLK: ::c_int = 12;
+pub const F_SETLKW: ::c_int = 13;
+pub const ELAST: ::c_int = 96;
+pub const RLIMIT_NPTS: ::c_int = 11;
+pub const RLIMIT_SWAP: ::c_int = 12;
+pub const RLIM_NLIMITS: ::rlim_t = 13;
+
+pub const Q_GETQUOTA: ::c_int = 0x700;
+pub const Q_SETQUOTA: ::c_int = 0x800;
+
+pub const POSIX_FADV_NORMAL: ::c_int = 0;
+pub const POSIX_FADV_RANDOM: ::c_int = 1;
+pub const POSIX_FADV_SEQUENTIAL: ::c_int = 2;
+pub const POSIX_FADV_WILLNEED: ::c_int = 3;
+pub const POSIX_FADV_DONTNEED: ::c_int = 4;
+pub const POSIX_FADV_NOREUSE: ::c_int = 5;
+
+extern {
+ pub fn __error() -> *mut ::c_int;
+
+ pub fn mprotect(addr: *const ::c_void, len: ::size_t, prot: ::c_int)
+ -> ::c_int;
+
+ pub fn clock_gettime(clk_id: ::c_int, tp: *mut ::timespec) -> ::c_int;
+
+ pub fn posix_fallocate(fd: ::c_int, offset: ::off_t,
+ len: ::off_t) -> ::c_int;
+ pub fn posix_fadvise(fd: ::c_int, offset: ::off_t, len: ::off_t,
+ advise: ::c_int) -> ::c_int;
+ pub fn mkostemp(template: *mut ::c_char, flags: ::c_int) -> ::c_int;
+ pub fn mkostemps(template: *mut ::c_char, suffixlen: ::c_int, flags: ::c_int) -> ::c_int;
+}
+
+cfg_if! {
+ if #[cfg(target_arch = "x86")] {
+ mod x86;
+ pub use self::x86::*;
+ } else if #[cfg(target_arch = "x86_64")] {
+ mod x86_64;
+ pub use self::x86_64::*;
+ } else {
+ // ...
+ }
+}
diff --git a/src/unix/bsd/freebsdlike/x86.rs b/src/unix/bsd/freebsdlike/freebsd/x86.rs
similarity index 100%
rename from src/unix/bsd/freebsdlike/x86.rs
rename to src/unix/bsd/freebsdlike/freebsd/x86.rs
diff --git a/src/unix/bsd/freebsdlike/x86_64.rs b/src/unix/bsd/freebsdlike/freebsd/x86_64.rs
similarity index 100%
rename from src/unix/bsd/freebsdlike/x86_64.rs
rename to src/unix/bsd/freebsdlike/freebsd/x86_64.rs
diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs
index 011cf86..ac4cda7 100644
--- a/src/unix/bsd/freebsdlike/mod.rs
+++ b/src/unix/bsd/freebsdlike/mod.rs
@@ -1,10 +1,5 @@
-pub type clock_t = i32;
pub type dev_t = u32;
-pub type ino_t = u32;
pub type mode_t = u16;
-pub type nlink_t = u16;
-pub type blksize_t = u32;
-pub type fflags_t = u32;
pub type pthread_attr_t = *mut ::c_void;
pub type rlim_t = i64;
pub type pthread_mutex_t = *mut ::c_void;
@@ -18,14 +13,6 @@
pub enum timezone {}
s! {
- pub struct dirent {
- pub d_fileno: u32,
- pub d_reclen: u16,
- pub d_type: u8,
- pub d_namlen: u8,
- pub d_name: [::c_char; 256],
- }
-
pub struct glob_t {
pub gl_pathc: ::size_t,
__unused1: ::size_t,
@@ -88,20 +75,6 @@
pub ss_flags: ::c_int,
}
- pub struct statvfs {
- pub f_bavail: ::fsblkcnt_t,
- pub f_bfree: ::fsblkcnt_t,
- pub f_blocks: ::fsblkcnt_t,
- pub f_favail: ::fsfilcnt_t,
- pub f_ffree: ::fsfilcnt_t,
- pub f_files: ::fsfilcnt_t,
- pub f_bsize: ::c_ulong,
- pub f_flag: ::c_ulong,
- pub f_frsize: ::c_ulong,
- pub f_fsid: ::c_ulong,
- pub f_namemax: ::c_ulong,
- }
-
pub struct sched_param {
pub sched_priority: ::c_int,
}
@@ -137,6 +110,7 @@
pub l_pid: ::pid_t,
pub l_type: ::c_short,
pub l_whence: ::c_short,
+ #[cfg(not(target_os = "dragonfly"))]
pub l_sysid: ::c_int,
}
@@ -150,7 +124,6 @@
pub const EXIT_FAILURE: ::c_int = 1;
pub const EXIT_SUCCESS: ::c_int = 0;
-pub const RAND_MAX: ::c_int = 0x7fff_fffd;
pub const EOF: ::c_int = -1;
pub const SEEK_SET: ::c_int = 0;
pub const SEEK_CUR: ::c_int = 1;
@@ -173,7 +146,6 @@
pub const O_EXCL: ::c_int = 2048;
pub const O_NOCTTY: ::c_int = 32768;
pub const O_TRUNC: ::c_int = 1024;
-pub const O_CLOEXEC: ::c_int = 0x00100000;
pub const S_IFIFO: mode_t = 4096;
pub const S_IFCHR: mode_t = 8192;
pub const S_IFBLK: mode_t = 24576;
@@ -209,9 +181,6 @@
pub const F_TLOCK: ::c_int = 2;
pub const F_ULOCK: ::c_int = 0;
pub const F_DUPFD_CLOEXEC: ::c_int = 17;
-pub const F_GETLK: ::c_int = 11;
-pub const F_SETLK: ::c_int = 12;
-pub const F_SETLKW: ::c_int = 13;
pub const SIGHUP: ::c_int = 1;
pub const SIGINT: ::c_int = 2;
pub const SIGQUIT: ::c_int = 3;
@@ -337,7 +306,6 @@
pub const EMULTIHOP: ::c_int = 90;
pub const ENOLINK: ::c_int = 91;
pub const EPROTO: ::c_int = 92;
-pub const ELAST: ::c_int = 96;
pub const F_DUPFD: ::c_int = 0;
pub const F_GETFD: ::c_int = 1;
@@ -365,13 +333,6 @@
pub const POSIX_MADV_WILLNEED: ::c_int = 3;
pub const POSIX_MADV_DONTNEED: ::c_int = 4;
-pub const POSIX_FADV_NORMAL: ::c_int = 0;
-pub const POSIX_FADV_RANDOM: ::c_int = 1;
-pub const POSIX_FADV_SEQUENTIAL: ::c_int = 2;
-pub const POSIX_FADV_WILLNEED: ::c_int = 3;
-pub const POSIX_FADV_DONTNEED: ::c_int = 4;
-pub const POSIX_FADV_NOREUSE: ::c_int = 5;
-
pub const _SC_IOV_MAX: ::c_int = 56;
pub const _SC_GETGR_R_SIZE_MAX: ::c_int = 70;
pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 71;
@@ -420,14 +381,11 @@
pub const RLIMIT_SBSIZE: ::c_int = 9;
pub const RLIMIT_VMEM: ::c_int = 10;
pub const RLIMIT_AS: ::c_int = RLIMIT_VMEM;
-pub const RLIMIT_NPTS: ::c_int = 11;
-pub const RLIMIT_SWAP: ::c_int = 12;
-
-pub const RLIM_NLIMITS: rlim_t = 13;
pub const RLIM_INFINITY: rlim_t = 0x7fff_ffff_ffff_ffff;
pub const RUSAGE_SELF: ::c_int = 0;
pub const RUSAGE_CHILDREN: ::c_int = -1;
+#[cfg(not(target_os = "dragonfly"))]
pub const RUSAGE_THREAD: ::c_int = 1;
pub const MADV_NORMAL: ::c_int = 0;
@@ -440,6 +398,7 @@
pub const MADV_AUTOSYNC: ::c_int = 7;
pub const MADV_NOCORE: ::c_int = 8;
pub const MADV_CORE: ::c_int = 9;
+#[cfg(not(target_os = "dragonfly"))]
pub const MADV_PROTECT: ::c_int = 10;
pub const MINCORE_INCORE: ::c_int = 0x1;
@@ -584,9 +543,6 @@
pub const NI_MAXHOST: ::size_t = 1025;
-pub const Q_GETQUOTA: ::c_int = 0x700;
-pub const Q_SETQUOTA: ::c_int = 0x800;
-
pub const RTLD_LOCAL: ::c_int = 0;
pub const RTLD_NODELETE: ::c_int = 0x1000;
pub const RTLD_NOLOAD: ::c_int = 0x2000;
@@ -606,8 +562,6 @@
mibp: *mut ::c_int,
sizep: *mut ::size_t)
-> ::c_int;
- pub fn mprotect(addr: *const ::c_void, len: ::size_t, prot: ::c_int)
- -> ::c_int;
pub fn shm_open(name: *const ::c_char, oflag: ::c_int, mode: ::mode_t)
-> ::c_int;
pub fn sysctl(name: *const ::c_int,
@@ -623,10 +577,7 @@
newp: *const ::c_void,
newlen: ::size_t)
-> ::c_int;
- pub fn clock_gettime(clk_id: ::c_int, tp: *mut ::timespec) -> ::c_int;
pub fn pthread_set_name_np(tid: ::pthread_t, name: *const ::c_char);
- pub fn posix_fallocate(fd: ::c_int, offset: ::off_t,
- len: ::off_t) -> ::c_int;
pub fn sched_setscheduler(pid: ::pid_t, policy: ::c_int, param: *const sched_param) -> ::c_int;
pub fn sched_getscheduler(pid: ::pid_t) -> ::c_int;
pub fn memrchr(cx: *const ::c_void, c: ::c_int, n: ::size_t) -> *mut ::c_void;
@@ -637,23 +588,6 @@
hdtr: *mut ::sf_hdtr,
sbytes: *mut ::off_t,
flags: ::c_int) -> ::c_int;
-
- pub fn posix_fadvise(fd: ::c_int, offset: ::off_t, len: ::off_t,
- advise: ::c_int) -> ::c_int;
- pub fn mkostemp(template: *mut ::c_char, flags: ::c_int) -> ::c_int;
- pub fn mkostemps(template: *mut ::c_char, suffixlen: ::c_int, flags: ::c_int) -> ::c_int;
-}
-
-cfg_if! {
- if #[cfg(target_arch = "x86")] {
- mod x86;
- pub use self::x86::*;
- } else if #[cfg(target_arch = "x86_64")] {
- mod x86_64;
- pub use self::x86_64::*;
- } else {
- // ...
- }
}
cfg_if! {
diff --git a/src/unix/bsd/mod.rs b/src/unix/bsd/mod.rs
index d6752a5..139edf7 100644
--- a/src/unix/bsd/mod.rs
+++ b/src/unix/bsd/mod.rs
@@ -63,10 +63,10 @@
pub struct fd_set {
#[cfg(all(target_pointer_width = "64",
- target_os = "freebsd"))]
+ any(target_os = "freebsd", target_os = "dragonfly")))]
fds_bits: [i64; FD_SETSIZE / 64],
#[cfg(not(all(target_pointer_width = "64",
- target_os = "freebsd")))]
+ any(target_os = "freebsd", target_os = "dragonfly"))))]
fds_bits: [i32; FD_SETSIZE / 32],
}
@@ -85,11 +85,26 @@
}
pub struct utsname {
+ #[cfg(not(target_os = "dragonfly"))]
pub sysname: [::c_char; 256],
+ #[cfg(target_os = "dragonfly")]
+ pub sysname: [::c_char; 32],
+ #[cfg(not(target_os = "dragonfly"))]
pub nodename: [::c_char; 256],
+ #[cfg(target_os = "dragonfly")]
+ pub nodename: [::c_char; 32],
+ #[cfg(not(target_os = "dragonfly"))]
pub release: [::c_char; 256],
+ #[cfg(target_os = "dragonfly")]
+ pub release: [::c_char; 32],
+ #[cfg(not(target_os = "dragonfly"))]
pub version: [::c_char; 256],
+ #[cfg(target_os = "dragonfly")]
+ pub version: [::c_char; 32],
+ #[cfg(not(target_os = "dragonfly"))]
pub machine: [::c_char; 256],
+ #[cfg(target_os = "dragonfly")]
+ pub machine: [::c_char; 32],
}
pub struct msghdr {