# HG changeset patch
# User Barry Tannenbaum <barry.m.tannenbaum@intel.com>
# Date 1439900888 14400
#      Tue Aug 18 08:28:08 2015 -0400
# Node ID 6c173f5dd4d9b84b0201e4804eba33c4e8671388
# Parent  cb19cb9911ce09576f65f8df9768179f454982ff
Fixed all instances of warnings C4047, C4244, and C4113, all haveing to do with improper function pointer types

diff --git a/src/topology-windows.c b/src/topology-windows.c
--- a/src/topology-windows.c
+++ b/src/topology-windows.c
@@ -319,9 +319,14 @@
   return hwloc_win_get_proc_membind(topology, GetCurrentProcess(), nodeset, policy, flags);
 }
 
-static LPVOID (WINAPI *VirtualAllocExNumaProc)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, DWORD nndPreferred);
-static BOOL (WINAPI *VirtualFreeExProc)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
-static BOOL (WINAPI *QueryWorkingSetExProc)(HANDLE hProcess, PVOID pv, DWORD cb);
+typedef LPVOID (WINAPI *PFN_VIRTUALALLOCEXNUMA)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, DWORD nndPreferred);
+PFN_VIRTUALALLOCEXNUMA VirtualAllocExNumaProc = NULL;
+
+typedef BOOL (WINAPI *PFN_VIRTUALFREEEX)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
+PFN_VIRTUALFREEEX VirtualFreeExProc = NULL;
+
+typedef BOOL (WINAPI *PFN_QUERYWORKINGSETEX)(HANDLE hProcess, PVOID pv, DWORD cb);
+PFN_QUERYWORKINGSETEX QueryWorkingSetExProc = NULL;
 
 static int hwloc_win_get_VirtualAllocExNumaProc(void) {
   if (VirtualAllocExNumaProc == NULL) {
@@ -335,14 +340,14 @@
     }
 
     if (!alloc_fun || !free_fun) {
-      VirtualAllocExNumaProc = (FARPROC) -1;
+      VirtualAllocExNumaProc = (PFN_VIRTUALALLOCEXNUMA) -1;
       errno = ENOSYS;
       return -1;
     }
 
-    VirtualAllocExNumaProc = alloc_fun;
-    VirtualFreeExProc = free_fun;
-  } else if ((FARPROC) VirtualAllocExNumaProc == (FARPROC)-1) {
+    VirtualAllocExNumaProc = (PFN_VIRTUALALLOCEXNUMA)alloc_fun;
+    VirtualFreeExProc = (PFN_VIRTUALFREEEX)free_fun;
+  } else if (VirtualAllocExNumaProc == (PFN_VIRTUALALLOCEXNUMA)-1) {
     errno = ENOSYS;
     return -1;
   }
@@ -407,13 +412,13 @@
     }
 
     if (!fun) {
-      QueryWorkingSetExProc = (FARPROC) -1;
+      QueryWorkingSetExProc = (PFN_QUERYWORKINGSETEX) -1;
       errno = ENOSYS;
       return -1;
     }
 
-    QueryWorkingSetExProc = fun;
-  } else if ((FARPROC) QueryWorkingSetExProc == (FARPROC)-1) {
+    QueryWorkingSetExProc = (PFN_QUERYWORKINGSETEX)fun;
+  } else if (QueryWorkingSetExProc == (PFN_QUERYWORKINGSETEX)-1) {
     errno = ENOSYS;
     return -1;
   }
@@ -475,15 +480,21 @@
 static int
 hwloc_look_windows(struct hwloc_backend *backend)
 {
+  typedef BOOL (WINAPI *PFN_GETLOGICALPROCESSORINFORMATION)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, PDWORD ReturnLength);
+  PFN_GETLOGICALPROCESSORINFORMATION GetLogicalProcessorInformationProc;
+
+  typedef BOOL (WINAPI *PFN_GETLOGICALPROCESSORINFORMATIONEX)(LOGICAL_PROCESSOR_RELATIONSHIP relationship, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, PDWORD ReturnLength);
+  PFN_GETLOGICALPROCESSORINFORMATIONEX GetLogicalProcessorInformationExProc;
+
+  typedef BOOL (WINAPI *PFN_GETNUMAAVAILABLEMEMORYNODE)(UCHAR Node, PULONGLONG AvailableBytes);
+  PFN_GETNUMAAVAILABLEMEMORYNODE GetNumaAvailableMemoryNodeProc;
+
+  typedef BOOL (WINAPI *PFN_GETNUMAAVAILABLEMEMORYNODEEX)(USHORT Node, PULONGLONG AvailableBytes);
+  PFN_GETNUMAAVAILABLEMEMORYNODEEX GetNumaAvailableMemoryNodeExProc;
+
   struct hwloc_topology *topology = backend->topology;
-  BOOL (WINAPI *GetLogicalProcessorInformationProc)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, PDWORD ReturnLength);
-  BOOL (WINAPI *GetLogicalProcessorInformationExProc)(LOGICAL_PROCESSOR_RELATIONSHIP relationship, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, PDWORD ReturnLength);
-  BOOL (WINAPI *GetNumaAvailableMemoryNodeProc)(UCHAR Node, PULONGLONG AvailableBytes);
-  BOOL (WINAPI *GetNumaAvailableMemoryNodeExProc)(USHORT Node, PULONGLONG AvailableBytes);
   SYSTEM_INFO SystemInfo;
-
   DWORD length;
-
   HMODULE kernel32;
 
   if (topology->levels[0][0]->cpuset)
@@ -496,10 +507,14 @@
 
   kernel32 = LoadLibrary("kernel32.dll");
   if (kernel32) {
-    GetLogicalProcessorInformationProc = GetProcAddress(kernel32, "GetLogicalProcessorInformation");
-    GetNumaAvailableMemoryNodeProc = GetProcAddress(kernel32, "GetNumaAvailableMemoryNode");
-    GetNumaAvailableMemoryNodeExProc = GetProcAddress(kernel32, "GetNumaAvailableMemoryNodeEx");
-    GetLogicalProcessorInformationExProc = GetProcAddress(kernel32, "GetLogicalProcessorInformationEx");
+    GetLogicalProcessorInformationProc =
+        (PFN_GETLOGICALPROCESSORINFORMATION)GetProcAddress(kernel32, "GetLogicalProcessorInformation");
+    GetNumaAvailableMemoryNodeProc =
+        (PFN_GETNUMAAVAILABLEMEMORYNODE)GetProcAddress(kernel32, "GetNumaAvailableMemoryNode");
+    GetNumaAvailableMemoryNodeExProc =
+        (PFN_GETNUMAAVAILABLEMEMORYNODEEX)GetProcAddress(kernel32, "GetNumaAvailableMemoryNodeEx");
+    GetLogicalProcessorInformationExProc =
+        (PFN_GETLOGICALPROCESSORINFORMATIONEX)GetProcAddress(kernel32, "GetLogicalProcessorInformationEx");
 
     if (!GetLogicalProcessorInformationExProc && GetLogicalProcessorInformationProc) {
       PSYSTEM_LOGICAL_PROCESSOR_INFORMATION procInfo;
