diff --git a/libc-test/build.rs b/libc-test/build.rs
index 1f991f1..7e22708 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -50,10 +50,6 @@
     fn headers(&self) -> Vec<&'static str> {
         let mut base = Vec::new();
 
-        if self.target.contains("windows") {
-            base.push("windows.h");
-        }
-
         base.extend(&[
             "errno.h",
             "fcntl.h",
@@ -78,7 +74,10 @@
         }
 
         if self.target.contains("windows") {
-            base.push("winsock.h");
+            base.push("winsock2.h");
+            base.push("ws2ipdef.h");
+            base.push("windows.h");
+            base.push("sys/utime.h");
         } else {
             base.push("glob.h");
             base.push("ifaddrs.h");
@@ -103,6 +102,7 @@
     }
 
     fn rust2c(&self, ty: &str) -> String {
+        let windows = self.target.contains("windows");
         match ty {
             t if t.starts_with("c_") => {
                 match &ty[2..].replace("long", " long")[..] {
@@ -116,8 +116,18 @@
             "glob_t" => "glob_t".to_string(),
             t if t.starts_with("pthread") => t.to_string(),
 
-            t if self.structs.contains(t) => format!("struct {}", t),
+            t if self.structs.contains(t) => {
+                if windows && ty.chars().next().unwrap().is_uppercase() {
+                    t.to_string()
+                } else if windows && t == "stat" {
+                    "struct __stat64".to_string()
+                } else {
+                    format!("struct {}", t)
+                }
+            }
 
+            "time64_t" if windows => "__time64_t".to_string(),
+            "ssize_t" if windows => "SSIZE_T".to_string(),
             t => t.to_string(),
         }
     }
@@ -225,7 +235,9 @@
     cfg.file(out.join("all.c"));
 
     if tg.target.contains("msvc") {
-        cfg.flag("/W3").flag("/Wall").flag("/WX");
+        cfg.flag("/W3").flag("/Wall").flag("/WX")
+           .flag("/wd4820")  // weird warning about adding padding?
+           .flag("/wd4100"); // don't warn about unused parameters
     } else {
         cfg.flag("-Wall").flag("-Wextra").flag("-Werror")
            .flag("-Wno-unused-parameter");
@@ -322,13 +334,9 @@
                           iter::repeat("*").take(ptrs).collect::<String>());
         let cast = if name == "SIG_IGN" {"(size_t)"} else {""};
         t!(writeln!(self.c, r#"
-            int __test_const_{name}({cty} *out) {{
-                int ret = 0;
-                #if defined({name})
-                    *out = {cast}({name});
-                    ret = 1;
-                #endif
-                return ret;
+            int __test_const_{name}({cty} *outptr) {{
+                *outptr = {cast}({name});
+                return 1;
             }}
         "#, name = name, cast = cast, cty = cty));
         t!(writeln!(self.rust, r#"
diff --git a/libc-test/tests/all.rs b/libc-test/tests/all.rs
index 665747f..15ad2cf 100644
--- a/libc-test/tests/all.rs
+++ b/libc-test/tests/all.rs
@@ -7,6 +7,7 @@
 use std::mem;
 
 use libc::*;
+#[cfg(not(windows))]
 use libc::types::os::common::bsd43::*;
 
 trait Pretty {
diff --git a/src/lib.rs b/src/lib.rs
index 234a642..4000bd9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1694,11 +1694,11 @@
         pub mod common {
             pub mod posix01 {
                 use types::os::arch::c95::{c_short, time_t, c_long};
-                use types::os::arch::extra::{int64, time64_t};
+                use types::os::arch::extra::{time64_t};
                 use types::os::arch::posix88::{dev_t, ino_t};
 
-                // pub Note: this is the struct called stat64 in Windows. Not stat,
-                // nor stati64.
+                // pub Note: this is the struct called stat64 in Windows. Not
+                // stat, nor stati64.
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct stat {
                     pub st_dev: dev_t,
@@ -1708,7 +1708,7 @@
                     pub st_uid: c_short,
                     pub st_gid: c_short,
                     pub st_rdev: dev_t,
-                    pub st_size: int64,
+                    pub st_size: i64,
                     pub st_atime: time64_t,
                     pub st_mtime: time64_t,
                     pub st_ctime: time64_t,
@@ -1741,18 +1741,14 @@
                 use types::os::arch::c99::uintptr_t;
 
                 pub type SOCKET = uintptr_t;
-                pub type socklen_t = c_int;
-                pub type sa_family_t = u16;
-                pub type in_port_t = u16;
-                pub type in_addr_t = u32;
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct sockaddr {
-                    pub sa_family: sa_family_t,
+                    pub sa_family: u16,
                     pub sa_data: [u8; 14],
                 }
                 #[repr(C)]
                 #[derive(Copy)] pub struct sockaddr_storage {
-                    pub ss_family: sa_family_t,
+                    pub ss_family: u16,
                     __ss_pad1: [u8; 6],
                     __ss_align: i64,
                     __ss_pad2: [u8; 112],
@@ -1762,19 +1758,19 @@
                 }
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct sockaddr_in {
-                    pub sin_family: sa_family_t,
-                    pub sin_port: in_port_t,
+                    pub sin_family: u16,
+                    pub sin_port: u16,
                     pub sin_addr: in_addr,
                     pub sin_zero: [u8; 8],
                 }
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct in_addr {
-                    pub s_addr: in_addr_t,
+                    pub s_addr: u32,
                 }
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
-                    pub sin6_family: sa_family_t,
-                    pub sin6_port: in_port_t,
+                    pub sin6_family: u16,
+                    pub sin6_port: u16,
                     pub sin6_flowinfo: u32,
                     pub sin6_addr: in6_addr,
                     pub sin6_scope_id: u32,
@@ -1782,7 +1778,6 @@
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct in6_addr {
                     pub s6_addr: [u16; 8],
-                    __align: [u32; 0],
                 }
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct ip_mreq {
@@ -1805,14 +1800,6 @@
                     pub ai_addr: *mut sockaddr,
                     pub ai_next: *mut addrinfo,
                 }
-                #[repr(C)]
-                #[derive(Copy)] pub struct sockaddr_un {
-                    pub sun_family: sa_family_t,
-                    pub sun_path: [c_char; 108]
-                }
-                impl Clone for sockaddr_un {
-                    fn clone(&self) -> sockaddr_un { *self }
-                }
             }
         }
 
@@ -1847,11 +1834,6 @@
                 #[cfg(target_arch = "x86_64")]
                 pub type time_t = i64;
 
-                #[cfg(target_arch = "x86")]
-                pub type suseconds_t = i32;
-                #[cfg(target_arch = "x86_64")]
-                pub type suseconds_t = i64;
-
                 pub type wchar_t = u16;
             }
 
@@ -1878,11 +1860,6 @@
                 pub type dev_t = u32;
                 pub type ino_t = u16;
 
-                pub type pid_t = u32;
-
-                pub type useconds_t = u32;
-                pub type mode_t = u16;
-
                 #[cfg(target_arch = "x86")]
                 pub type ssize_t = i32;
                 #[cfg(target_arch = "x86_64")]
@@ -1959,10 +1936,9 @@
                 pub type SIZE_T = size_t;
 
                 pub type time64_t = i64;
-                pub type int64 = i64;
 
                 #[repr(C)]
-                #[derive(Copy, Clone)] pub struct STARTUPINFO {
+                #[derive(Copy, Clone)] pub struct STARTUPINFOW {
                     pub cb: DWORD,
                     pub lpReserved: LPWSTR,
                     pub lpDesktop: LPWSTR,
@@ -1972,7 +1948,7 @@
                     pub dwXSize: DWORD,
                     pub dwYSize: DWORD,
                     pub dwXCountChars: DWORD,
-                    pub dwYCountCharts: DWORD,
+                    pub dwYCountChars: DWORD,
                     pub dwFillAttribute: DWORD,
                     pub dwFlags: DWORD,
                     pub wShowWindow: WORD,
@@ -1982,7 +1958,7 @@
                     pub hStdOutput: HANDLE,
                     pub hStdError: HANDLE,
                 }
-                pub type LPSTARTUPINFO = *mut STARTUPINFO;
+                pub type LPSTARTUPINFOW = *mut STARTUPINFOW;
 
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct PROCESS_INFORMATION {
@@ -2019,7 +1995,7 @@
                     pub Protect: DWORD,
                     pub Type: DWORD,
                 }
-                pub type LPMEMORY_BASIC_INFORMATION = *mut MEMORY_BASIC_INFORMATION;
+                pub type PMEMORY_BASIC_INFORMATION = *mut MEMORY_BASIC_INFORMATION;
 
                 #[repr(C)]
                 #[derive(Copy, Clone)] pub struct OVERLAPPED {
@@ -2532,8 +2508,8 @@
             pub const BUFSIZ : c_uint = 512;
             pub const FOPEN_MAX : c_uint = 20;
             pub const FILENAME_MAX : c_uint = 260;
-            pub const L_tmpnam : c_uint = 16;
-            pub const TMP_MAX : c_uint = 32767;
+            pub const L_tmpnam : c_uint = 260;
+            pub const TMP_MAX : c_uint = 0x7fff_ffff;
 
             pub const WSAEINTR: c_int = 10004;
             pub const WSAEBADF: c_int = 10009;
@@ -2592,7 +2568,6 @@
         }
         pub mod posix88 {
             use types::os::arch::c95::c_int;
-            use types::os::arch::posix88::mode_t;
 
             pub const O_RDONLY : c_int = 0;
             pub const O_WRONLY : c_int = 1;
@@ -2601,36 +2576,13 @@
             pub const O_CREAT : c_int = 256;
             pub const O_EXCL : c_int = 1024;
             pub const O_TRUNC : c_int = 512;
-            pub const S_IFIFO : c_int = 4096;
             pub const S_IFCHR : c_int = 8192;
-            pub const S_IFBLK : c_int = 12288;
             pub const S_IFDIR : c_int = 16384;
             pub const S_IFREG : c_int = 32768;
-            pub const S_IFLNK : c_int = 40960;
-            pub const S_IFSOCK : mode_t = 49152;
             pub const S_IFMT : c_int = 61440;
             pub const S_IEXEC : c_int = 64;
             pub const S_IWRITE : c_int = 128;
             pub const S_IREAD : c_int = 256;
-            pub const S_IRWXU : c_int = 448;
-            pub const S_IXUSR : c_int = 64;
-            pub const S_IWUSR : c_int = 128;
-            pub const S_IRUSR : c_int = 256;
-            pub const S_IRWXG : mode_t = 56;
-            pub const S_IXGRP : mode_t = 8;
-            pub const S_IWGRP : mode_t = 16;
-            pub const S_IRGRP : mode_t = 32;
-            pub const S_IRWXO : mode_t = 7;
-            pub const S_IXOTH : mode_t = 1;
-            pub const S_IWOTH : mode_t = 2;
-            pub const S_IROTH : mode_t = 4;
-            pub const F_OK : c_int = 0;
-            pub const R_OK : c_int = 4;
-            pub const W_OK : c_int = 2;
-            pub const X_OK : c_int = 1;
-            pub const STDIN_FILENO : c_int = 0;
-            pub const STDOUT_FILENO : c_int = 1;
-            pub const STDERR_FILENO : c_int = 2;
         }
         pub mod posix01 {
         }
@@ -2651,8 +2603,8 @@
             pub const IP_MULTICAST_LOOP: c_int = 11;
             pub const IP_ADD_MEMBERSHIP: c_int = 12;
             pub const IP_DROP_MEMBERSHIP: c_int = 13;
-            pub const IPV6_ADD_MEMBERSHIP: c_int = 5;
-            pub const IPV6_DROP_MEMBERSHIP: c_int = 6;
+            pub const IPV6_ADD_MEMBERSHIP: c_int = 12;
+            pub const IPV6_DROP_MEMBERSHIP: c_int = 13;
             pub const IP_TTL: c_int = 4;
             pub const IP_HDRINCL: c_int = 2;
 
@@ -2679,9 +2631,9 @@
 
             pub const IFF_LOOPBACK: c_int = 4;
 
-            pub const SHUT_RD: c_int = 0;
-            pub const SHUT_WR: c_int = 1;
-            pub const SHUT_RDWR: c_int = 2;
+            pub const SD_RECEIVE: c_int = 0;
+            pub const SD_SEND: c_int = 1;
+            pub const SD_BOTH: c_int = 2;
         }
         pub mod extra {
             use types::os::common::bsd44::SOCKET;
@@ -2851,7 +2803,7 @@
             pub const FILE_FLAG_OPEN_NO_RECALL: DWORD = 0x00100000;
             pub const FILE_FLAG_OPEN_REPARSE_POINT: DWORD = 0x00200000;
             pub const FILE_FLAG_OVERLAPPED: DWORD = 0x40000000;
-            pub const FILE_FLAG_POSIX_SEMANTICS: DWORD = 0x0100000;
+            pub const FILE_FLAG_POSIX_SEMANTICS: DWORD = 0x1000000;
             pub const FILE_FLAG_RANDOM_ACCESS: DWORD = 0x10000000;
             pub const FILE_FLAG_SESSION_AWARE: DWORD = 0x00800000;
             pub const FILE_FLAG_SEQUENTIAL_SCAN: DWORD = 0x08000000;
@@ -6155,25 +6107,25 @@
     #[cfg(windows)]
     pub mod bsd43 {
         use types::common::c95::{c_void};
-        use types::os::common::bsd44::{socklen_t, sockaddr, SOCKET};
+        use types::os::common::bsd44::{sockaddr, SOCKET};
         use types::os::arch::c95::c_int;
 
         extern "system" {
             pub fn socket(domain: c_int, ty: c_int, protocol: c_int) -> SOCKET;
             pub fn connect(socket: SOCKET, address: *const sockaddr,
-                           len: socklen_t) -> c_int;
+                           len: c_int) -> c_int;
             pub fn bind(socket: SOCKET, address: *const sockaddr,
-                        address_len: socklen_t) -> c_int;
+                        address_len: c_int) -> c_int;
             pub fn listen(socket: SOCKET, backlog: c_int) -> c_int;
             pub fn accept(socket: SOCKET, address: *mut sockaddr,
-                          address_len: *mut socklen_t) -> SOCKET;
+                          address_len: *mut c_int) -> SOCKET;
             pub fn getpeername(socket: SOCKET, address: *mut sockaddr,
-                               address_len: *mut socklen_t) -> c_int;
+                               address_len: *mut c_int) -> c_int;
             pub fn getsockname(socket: SOCKET, address: *mut sockaddr,
-                               address_len: *mut socklen_t) -> c_int;
+                               address_len: *mut c_int) -> c_int;
             pub fn setsockopt(socket: SOCKET, level: c_int, name: c_int,
                               value: *const c_void,
-                              option_len: socklen_t) -> c_int;
+                              option_len: c_int) -> c_int;
             pub fn closesocket(socket: SOCKET) -> c_int;
             pub fn recv(socket: SOCKET, buf: *mut c_void, len: c_int,
                         flags: c_int) -> c_int;
@@ -6298,17 +6250,7 @@
 
         pub mod kernel32 {
             use types::os::arch::c95::{c_uint};
-            use types::os::arch::extra::{BOOL, DWORD, SIZE_T, HMODULE,
-                                               LPCWSTR, LPWSTR,
-                                               LPWCH, LPDWORD, LPVOID,
-                                               LPCVOID, LPOVERLAPPED,
-                                               LPSECURITY_ATTRIBUTES,
-                                               LPSTARTUPINFO,
-                                               LPPROCESS_INFORMATION,
-                                               LPMEMORY_BASIC_INFORMATION,
-                                               LPSYSTEM_INFO, HANDLE, LPHANDLE,
-                                               LARGE_INTEGER, PLARGE_INTEGER,
-                                               LPFILETIME, LPWIN32_FIND_DATAW};
+            use types::os::arch::extra::*;
 
             extern "system" {
                 pub fn GetEnvironmentVariableW(n: LPCWSTR,
@@ -6367,7 +6309,7 @@
                                       dwCreationFlags: DWORD,
                                       lpEnvironment: LPVOID,
                                       lpCurrentDirectory: LPCWSTR,
-                                      lpStartupInfo: LPSTARTUPINFO,
+                                      lpStartupInfo: LPSTARTUPINFOW,
                                       lpProcessInformation:
                                       LPPROCESS_INFORMATION)
                                       -> BOOL;
@@ -6398,7 +6340,7 @@
                                       lpflOldProtect: LPDWORD)
                                       -> BOOL;
                 pub fn VirtualQuery(lpAddress: LPCVOID,
-                                    lpBuffer: LPMEMORY_BASIC_INFORMATION,
+                                    lpBuffer: PMEMORY_BASIC_INFORMATION,
                                     dwLength: SIZE_T)
                                     -> SIZE_T;
                 pub fn CreateFileMappingW(hFile: HANDLE,
