diff --git a/libc-test/build.rs b/libc-test/build.rs
index 54f5a9f..d9aadc1 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -74,10 +74,14 @@
         }
 
         if self.target.contains("windows") {
-            base.push("winsock2.h");
-            base.push("ws2ipdef.h");
-            base.push("windows.h");
+            base.push("winsock2.h"); // must be before windows.h
+
+            base.push("direct.h");
+            base.push("io.h");
             base.push("sys/utime.h");
+            base.push("windows.h");
+            base.push("process.h");
+            base.push("ws2ipdef.h");
         } else {
             base.push("ctype.h");
             base.push("dirent.h");
@@ -131,6 +135,8 @@
                     t.to_string()
                 } else if windows && t == "stat" {
                     "struct __stat64".to_string()
+                } else if windows && t == "utimbuf" {
+                    "struct __utimbuf64".to_string()
                 } else {
                     format!("struct {}", t)
                 }
@@ -247,7 +253,8 @@
     if tg.target.contains("msvc") {
         cfg.flag("/W3").flag("/Wall").flag("/WX")
            .flag("/wd4820")  // weird warning about adding padding?
-           .flag("/wd4100"); // don't warn about unused parameters
+           .flag("/wd4100")  // don't warn about unused parameters
+           .flag("/wd4996"); // don't warn about deprecated functions
     } else {
         cfg.flag("-Wall").flag("-Wextra").flag("-Werror")
            .flag("-Wno-unused-parameter");
@@ -378,13 +385,15 @@
         "#, ty = rust_ty, name = name));
     }
 
-    fn test_extern_fn(&mut self, name: &str, args: &[String], ret: &str,
+    fn test_extern_fn(&mut self, name: &str, cname: &str,
+                      args: &[String], ret: &str,
                       variadic: bool) {
         match name {
             // manually verified
             "execv" |
             "execve" |
             "execvp" |
+            "execvpe" |
             "glob" |
             "getrlimit" |
             "setrlimit" |
@@ -401,11 +410,12 @@
         let cret = self.rust_ty_to_c_ty(ret);
         t!(writeln!(self.c, r#"
             {ret} (*__test_fn_{name}(void))({args}) {{
-                return {name};
+                return {cname};
             }}
-        "#, name = name, args = args, ret = cret));
+        "#, name = name, cname = cname, args = args, ret = cret));
         t!(writeln!(self.rust, r#"
             #[test]
+            #[cfg_attr(windows, ignore)] // FIXME -- dllimport weirdness?
             fn fn_{name}() {{
                 extern {{
                     fn __test_fn_{name}() -> size_t;
@@ -497,7 +507,14 @@
             ast::ForeignItemFn(ref decl, ref generics) => {
                 self.assert_no_generics(i.ident, generics);
                 let (ret, args, variadic) = self.decl2rust(decl);
-                self.test_extern_fn(&i.ident.to_string(), &args, &ret,
+                let cname = match attr::first_attr_value_str_by_name(&i.attrs,
+                                                                     "link_name") {
+                    Some(ref i) if !i.to_string().contains("$") => {
+                        i.to_string()
+                    }
+                    _ => i.ident.to_string(),
+                };
+                self.test_extern_fn(&i.ident.to_string(), &cname, &args, &ret,
                                     variadic);
             }
             ast::ForeignItemStatic(_, _) => {
diff --git a/src/lib.rs b/src/lib.rs
index 5aa50af..f17bc99 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -12,6 +12,7 @@
        html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
        html_root_url = "https://doc.rust-lang.org/nightly/",
        html_playground_url = "https://play.rust-lang.org/")]
+#![feature(linked_from)]
 
 //! Bindings for the C standard library and other platform libraries
 //!
@@ -5397,6 +5398,8 @@
             use types::os::arch::c95::{c_long, c_uint, c_ulong};
             use types::os::arch::c95::{size_t};
 
+            #[linked_from = "kernel32"]
+            #[link(name = "kernel32")]
             extern {
                 pub fn abs(i: c_int) -> c_int;
                 pub fn labs(i: c_long) -> c_long;
@@ -5527,11 +5530,9 @@
             use types::os::arch::c95::{c_int, c_char, wchar_t};
             extern {
                 #[link_name = "_open"]
-                pub fn open(path: *const c_char, oflag: c_int, mode: c_int)
-                            -> c_int;
+                pub fn open(path: *const c_char, oflag: c_int, ...) -> c_int;
                 #[link_name = "_wopen"]
-                pub fn wopen(path: *const wchar_t, oflag: c_int, mode: c_int)
-                            -> c_int;
+                pub fn wopen(path: *const wchar_t, oflag: c_int, ...) -> c_int;
                 #[link_name = "_creat"]
                 pub fn creat(path: *const c_char, mode: c_int) -> c_int;
             }
@@ -5543,8 +5544,7 @@
 
         pub mod unistd {
             use types::common::c95::c_void;
-            use types::os::arch::c95::{c_int, c_uint, c_char,
-                                             c_long, size_t};
+            use types::os::arch::c95::{c_int, c_uint, c_char, c_long};
             use types::os::arch::c99::intptr_t;
 
             extern {
@@ -5572,7 +5572,7 @@
                 pub fn execvpe(c: *const c_char, argv: *const *const c_char,
                                envp: *const *const c_char) -> c_int;
                 #[link_name = "_getcwd"]
-                pub fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char;
+                pub fn getcwd(buf: *mut c_char, size: c_int) -> *mut c_char;
                 #[link_name = "_getpid"]
                 pub fn getpid() -> c_int;
                 #[link_name = "_isatty"]
@@ -6480,7 +6480,7 @@
         }
 
         pub mod msvcrt {
-            use types::os::arch::c95::{c_int, c_long};
+            use types::os::arch::c95::c_int;
             use types::os::arch::c99::intptr_t;
 
             extern {
@@ -6488,7 +6488,7 @@
                 pub fn commit(fd: c_int) -> c_int;
 
                 #[link_name = "_get_osfhandle"]
-                pub fn get_osfhandle(fd: c_int) -> c_long;
+                pub fn get_osfhandle(fd: c_int) -> intptr_t;
 
                 #[link_name = "_open_osfhandle"]
                 pub fn open_osfhandle(osfhandle: intptr_t,
