diff --git a/libc-test/build.rs b/libc-test/build.rs
index 2c0d5853623487492bb79878e83e49fd72cce52d..6475db5749c2779386b5082bac93b53e17fee979 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -121,6 +121,7 @@ fn main() {
         cfg.header("mach-o/dyld.h");
         cfg.header("mach/mach_time.h");
         cfg.header("malloc/malloc.h");
+        cfg.header("util.h");
         if target.starts_with("x86") {
             cfg.header("crt_externs.h");
         }
diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs
index 3d96ed9308545a355f1a5b7797199610f87757da..ec0fe7c111b43fbd6ebfdd82a539015dc05da811 100644
--- a/src/unix/bsd/apple/mod.rs
+++ b/src/unix/bsd/apple/mod.rs
@@ -927,6 +927,15 @@ extern {
                     len: *mut ::off_t,
                     hdtr: *mut ::sf_hdtr,
                     flags: ::c_int) -> ::c_int;
+    pub fn openpty(amaster: *mut ::c_int,
+                   aslave: *mut ::c_int,
+                   name: *mut ::c_char,
+                   termp: *mut termios,
+                   winp: *mut ::winsize) -> ::c_int;
+    pub fn forkpty(amaster: *mut ::c_int,
+                   name: *mut ::c_char,
+                   termp: *mut termios,
+                   winp: *mut ::winsize) -> ::pid_t;
 }
 
 cfg_if! {
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index 6176402fb07e5788e43237b149b7030dbf37442f..3ffb3b79cf9d205ec9e1c7471fe91e9bffdbd5c9 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -99,6 +99,13 @@ s! {
         pub events: ::c_short,
         pub revents: ::c_short,
     }
+
+    pub struct winsize {
+        pub ws_row: ::c_ushort,
+        pub ws_col: ::c_ushort,
+        pub ws_xpixel: ::c_ushort,
+        pub ws_ypixel: ::c_ushort,
+    }
 }
 
 pub const SIG_DFL: sighandler_t = 0 as sighandler_t;