From fd9b0332accd0a72604d2a5fae338d690c2dc6e5 Mon Sep 17 00:00:00 2001
From: Mahmut Bulut <vertexclique@gmail.com>
Date: Fri, 13 Dec 2019 20:11:26 +0100
Subject: [PATCH 1/3] Update windows datatypes

---
 bastion-executor/Cargo.toml       | 2 +-
 bastion-executor/src/placement.rs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/bastion-executor/Cargo.toml b/bastion-executor/Cargo.toml
index 12d0fee3..37e3ace6 100644
--- a/bastion-executor/Cargo.toml
+++ b/bastion-executor/Cargo.toml
@@ -41,7 +41,7 @@ allocator-suite = { version = "^0.1", optional = true, default-features = false
 jemallocator = { version = "^0.3", optional = true, default-features = false }
 
 [target.'cfg(target_os = "windows")'.dependencies]
-winapi = "^0.2.8"
+winapi = { version = "^0.3.8", features = ["basetsd"] }
 kernel32-sys = "^0.2.2"
 
 [dev-dependencies]
diff --git a/bastion-executor/src/placement.rs b/bastion-executor/src/placement.rs
index 82a07774..8aec14ce 100644
--- a/bastion-executor/src/placement.rs
+++ b/bastion-executor/src/placement.rs
@@ -185,7 +185,7 @@ mod windows {
     use kernel32::{
         GetCurrentProcess, GetCurrentThread, GetProcessAffinityMask, SetThreadAffinityMask,
     };
-    use winapi::basetsd::{DWORD_PTR, PDWORD_PTR};
+    use winapi::shared::basetsd::{DWORD_PTR, PDWORD_PTR};
 
     use super::CoreId;
 

From b5936479f1c31f4cafd3725e77a38ac39435ee37 Mon Sep 17 00:00:00 2001
From: Mahmut Bulut <vertexclique@gmail.com>
Date: Fri, 13 Dec 2019 20:51:13 +0100
Subject: [PATCH 2/3] Fix pointer width, goddamit

---
 bastion-executor/Cargo.toml       |  1 +
 bastion-executor/src/placement.rs | 33 ++++++++++++++++++-------------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/bastion-executor/Cargo.toml b/bastion-executor/Cargo.toml
index 37e3ace6..ff00822a 100644
--- a/bastion-executor/Cargo.toml
+++ b/bastion-executor/Cargo.toml
@@ -42,6 +42,7 @@ jemallocator = { version = "^0.3", optional = true, default-features = false }
 
 [target.'cfg(target_os = "windows")'.dependencies]
 winapi = { version = "^0.3.8", features = ["basetsd"] }
+#winapi = "^0.2.8"
 kernel32-sys = "^0.2.2"
 
 [dev-dependencies]
diff --git a/bastion-executor/src/placement.rs b/bastion-executor/src/placement.rs
index 8aec14ce..a2105c35 100644
--- a/bastion-executor/src/placement.rs
+++ b/bastion-executor/src/placement.rs
@@ -214,26 +214,31 @@ mod windows {
 
         // Set core affinity for current thread.
         unsafe {
-            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD_PTR);
+            #[cfg(target_pointer_width = "32")]
+            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD_PTR as u32);
+            #[cfg(target_pointer_width = "64")]
+            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD_PTR as u64);
         }
     }
 
     fn get_affinity_mask() -> Option<u64> {
-        #[cfg(target_pointer_width = "64")]
-        let mut process_mask: u64 = 0;
-        #[cfg(target_pointer_width = "32")]
-        let mut process_mask: u32 = 0;
-        #[cfg(target_pointer_width = "64")]
-        let mut system_mask: u64 = 0;
-        #[cfg(target_pointer_width = "32")]
-        let mut system_mask: u32 = 0;
+        let mut process_mask: usize = 0;
+        let mut system_mask: usize = 0;
 
         let res = unsafe {
-            GetProcessAffinityMask(
-                GetCurrentProcess(),
-                &mut process_mask as PDWORD_PTR,
-                &mut system_mask as PDWORD_PTR,
-            )
+            // Good luck with other architectures.
+            // Since Windows is already like a cartoon:
+            // Tinky winky, dipsy, laa laa, po.
+            #[cfg(target_pointer_width = "32")]
+            let mut pm = process_mask as u32;
+            #[cfg(target_pointer_width = "64")]
+            let mut pm = process_mask as u64;
+            #[cfg(target_pointer_width = "32")]
+            let mut sm = system_mask as u32;
+            #[cfg(target_pointer_width = "64")]
+            let mut sm = system_mask as u64;
+
+            GetProcessAffinityMask(GetCurrentProcess(), &mut pm, &mut sm)
         };
 
         // Successfully retrieved affinity mask

From d646daa52670a8a70f29ada1f39b16daa5daa409 Mon Sep 17 00:00:00 2001
From: Mahmut Bulut <vertexclique@gmail.com>
Date: Fri, 13 Dec 2019 20:52:02 +0100
Subject: [PATCH 3/3] Remove old dependency

---
 bastion-executor/Cargo.toml       |  1 -
 bastion-executor/src/placement.rs | 36 ++++++++++++++++++++-----------
 2 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/bastion-executor/Cargo.toml b/bastion-executor/Cargo.toml
index ff00822a..37e3ace6 100644
--- a/bastion-executor/Cargo.toml
+++ b/bastion-executor/Cargo.toml
@@ -42,7 +42,6 @@ jemallocator = { version = "^0.3", optional = true, default-features = false }
 
 [target.'cfg(target_os = "windows")'.dependencies]
 winapi = { version = "^0.3.8", features = ["basetsd"] }
-#winapi = "^0.2.8"
 kernel32-sys = "^0.2.2"
 
 [dev-dependencies]
diff --git a/bastion-executor/src/placement.rs b/bastion-executor/src/placement.rs
index a2105c35..840542c0 100644
--- a/bastion-executor/src/placement.rs
+++ b/bastion-executor/src/placement.rs
@@ -185,7 +185,7 @@ mod windows {
     use kernel32::{
         GetCurrentProcess, GetCurrentThread, GetProcessAffinityMask, SetThreadAffinityMask,
     };
-    use winapi::shared::basetsd::{DWORD_PTR, PDWORD_PTR};
+    use winapi::shared::basetsd::{DWORD32, DWORD64, PDWORD32, PDWORD64};
 
     use super::CoreId;
 
@@ -215,30 +215,42 @@ mod windows {
         // Set core affinity for current thread.
         unsafe {
             #[cfg(target_pointer_width = "32")]
-            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD_PTR as u32);
+            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD32);
             #[cfg(target_pointer_width = "64")]
-            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD_PTR as u64);
+            SetThreadAffinityMask(GetCurrentThread(), mask as DWORD64);
         }
     }
 
     fn get_affinity_mask() -> Option<u64> {
-        let mut process_mask: usize = 0;
-        let mut system_mask: usize = 0;
+        #[cfg(target_pointer_width = "64")]
+        let mut process_mask: u64 = 0;
+        #[cfg(target_pointer_width = "32")]
+        let mut process_mask: u32 = 0;
+        #[cfg(target_pointer_width = "64")]
+        let mut system_mask: u64 = 0;
+        #[cfg(target_pointer_width = "32")]
+        let mut system_mask: u32 = 0;
 
         let res = unsafe {
             // Good luck with other architectures.
             // Since Windows is already like a cartoon:
             // Tinky winky, dipsy, laa laa, po.
+
             #[cfg(target_pointer_width = "32")]
-            let mut pm = process_mask as u32;
-            #[cfg(target_pointer_width = "64")]
-            let mut pm = process_mask as u64;
-            #[cfg(target_pointer_width = "32")]
-            let mut sm = system_mask as u32;
+            let r = GetProcessAffinityMask(
+                GetCurrentProcess(),
+                &mut process_mask as PDWORD32,
+                &mut system_mask as PDWORD32,
+            );
+
             #[cfg(target_pointer_width = "64")]
-            let mut sm = system_mask as u64;
+            let r = GetProcessAffinityMask(
+                GetCurrentProcess(),
+                &mut process_mask as PDWORD64,
+                &mut system_mask as PDWORD64,
+            );
 
-            GetProcessAffinityMask(GetCurrentProcess(), &mut pm, &mut sm)
+            r
         };
 
         // Successfully retrieved affinity mask