From b9d86a6e8aad5710f3f05b0a0d107346d364a1e6 Mon Sep 17 00:00:00 2001
From: Mackenzie Clark <mackenzie.a.z.c@gmail.com>
Date: Sun, 23 Dec 2018 12:41:09 -0800
Subject: [PATCH] use the correct calling convention with extern "system"

---
 src/windows/mod.rs | 43 +++++++++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/src/windows/mod.rs b/src/windows/mod.rs
index 7101a509..73c5989b 100644
--- a/src/windows/mod.rs
+++ b/src/windows/mod.rs
@@ -50,7 +50,7 @@ pub type ino_t = u16;
 pub enum timezone {}
 pub type time64_t = i64;
 
-pub type SOCKET = uintptr_t;
+pub type SOCKET = ::uintptr_t;
 
 s! {
     // note this is the struct called stat64 in Windows. Not stat, nor stati64.
@@ -308,19 +308,6 @@ extern {
     pub fn signal(signum: c_int, handler: sighandler_t) -> sighandler_t;
     pub fn raise(signum: c_int) -> c_int;
 
-    // winsock functions
-    pub fn listen(s: SOCKET, backlog: c_int) -> c_int;
-    pub fn accept(s: SOCKET, addr: *mut sockaddr, addrlen: *mut c_int) -> SOCKET;
-    pub fn bind(s: SOCKET, name: *mut sockaddr, namelen: c_int) -> c_int;
-    pub fn connect(s: SOCKET, name: *mut sockaddr, namelen: c_int) -> c_int;
-    pub fn getpeername(s: SOCKET, name: *mut sockaddr, nameln: *mut c_int) -> c_int;
-    pub fn getsockname(s: SOCKET, name: *mut sockaddr, nameln: *mut c_int) -> c_int;
-    pub fn getsockopt(s: SOCKET, level: c_int, optname: c_int, optval: *mut c_char, optlen: *mut c_int) -> c_int;
-    pub fn recvfrom(s: SOCKET, buf: *mut c_char, len: c_int, flags: c_int, from: *mut sockaddr, fromlen: *mut c_int) -> c_int;
-    pub fn sendto(s: SOCKET, buf: *mut c_char, len: c_int, flags: c_int, to: *mut sockaddr, tolen: c_int) -> c_int;
-    pub fn setsockopt(s: SOCKET, level: c_int, optname: c_int, optval: *mut c_char, optlen: c_int) -> c_int;
-    pub fn socket(af: c_int, socket_type: c_int, protocol: c_int) -> SOCKET;
-
     #[link_name = "_chmod"]
     pub fn chmod(path: *const c_char, mode: ::c_int) -> ::c_int;
     #[link_name = "_wchmod"]
@@ -403,6 +390,34 @@ extern {
                       locale: *const wchar_t) -> *mut wchar_t;
 }
 
+extern "system" {
+    pub fn listen(s: SOCKET, backlog: ::c_int) -> ::c_int;
+    pub fn accept(s: SOCKET, addr: *mut ::sockaddr,
+                  addrlen: *mut ::c_int) -> SOCKET;
+    pub fn bind(s: SOCKET, name: *const ::sockaddr,
+                namelen: ::c_int) -> ::c_int;
+    pub fn connect(s: SOCKET, name: *const ::sockaddr,
+                   namelen: ::c_int) -> ::c_int;
+    pub fn getpeername(s: SOCKET, name: *mut ::sockaddr,
+                       nameln: *mut ::c_int) -> ::c_int;
+    pub fn getsockname(s: SOCKET, name: *mut ::sockaddr,
+                       nameln: *mut ::c_int) -> ::c_int;
+    pub fn getsockopt(s: SOCKET, level: ::c_int, optname: ::c_int,
+                      optval: *mut ::c_char,
+                      optlen: *mut ::c_int) -> ::c_int;
+    pub fn recvfrom(s: SOCKET, buf: *mut  ::c_char, len: ::c_int,
+                    flags: ::c_int, from: *mut ::sockaddr,
+                    fromlen: *mut ::c_int) -> ::c_int;
+    pub fn sendto(s: SOCKET, buf: *const  ::c_char, len: ::c_int,
+                  flags: ::c_int, to: *const ::sockaddr,
+                  tolen: ::c_int) -> ::c_int;
+    pub fn setsockopt(s: SOCKET, level: ::c_int, optname: ::c_int,
+                      optval: *const  ::c_char,
+                      optlen: ::c_int) -> ::c_int;
+    pub fn socket(af: ::c_int, socket_type: ::c_int,
+                  protocol: ::c_int) -> SOCKET;
+}
+
 cfg_if! {
     if #[cfg(core_cvoid)] {
         pub use core::ffi::c_void;
-- 
GitLab