aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/WindowsEnv/Registry.hs10
-rw-r--r--src/WindowsEnv/Utils.hs6
-rw-r--r--src/WindowsEnv/ccall.h13
3 files changed, 25 insertions, 4 deletions
diff --git a/src/WindowsEnv/Registry.hs b/src/WindowsEnv/Registry.hs
index da889d4..6eb52ca 100644
--- a/src/WindowsEnv/Registry.hs
+++ b/src/WindowsEnv/Registry.hs
@@ -8,6 +8,8 @@
--
-- Lower-level functions for reading and writing registry values.
+{-# LANGUAGE CPP #-}
+
module WindowsEnv.Registry
( IsKeyPath(..)
, RootKey(..)
@@ -148,13 +150,15 @@ decodeString (_, bytes) = T.unpack dropLastZero
| otherwise = T.takeWhile (/= '\0') text
text = decodeUtf16LE bytes
-foreign import ccall unsafe "Windows.h RegQueryValueExW"
+#include "ccall.h"
+
+foreign import WINDOWS_ENV_CCALL unsafe "Windows.h RegQueryValueExW"
c_RegQueryValueEx :: WinAPI.PKEY -> WinAPI.LPCTSTR -> WinAPI.LPDWORD -> WinAPI.LPDWORD -> WinAPI.LPBYTE -> WinAPI.LPDWORD -> IO WinAPI.ErrCode
-foreign import ccall unsafe "Windows.h RegSetValueExW"
+foreign import WINDOWS_ENV_CCALL unsafe "Windows.h RegSetValueExW"
c_RegSetValueEx :: WinAPI.PKEY -> WinAPI.LPCTSTR -> WinAPI.DWORD -> WinAPI.DWORD -> WinAPI.LPBYTE -> WinAPI.DWORD -> IO WinAPI.ErrCode
-foreign import ccall unsafe "Windows.h RegGetValueW"
+foreign import WINDOWS_ENV_CCALL unsafe "Windows.h RegGetValueW"
c_RegGetValue :: WinAPI.PKEY -> WinAPI.LPCTSTR -> WinAPI.LPCTSTR -> WinAPI.DWORD -> WinAPI.LPDWORD -> WinAPI.LPBYTE -> WinAPI.LPDWORD -> IO WinAPI.ErrCode
queryValue :: IsKeyPath a => a -> ValueName -> ExceptT IOError IO ValueData
diff --git a/src/WindowsEnv/Utils.hs b/src/WindowsEnv/Utils.hs
index c852229..4432a95 100644
--- a/src/WindowsEnv/Utils.hs
+++ b/src/WindowsEnv/Utils.hs
@@ -5,6 +5,8 @@
-- Stability : experimental
-- Portability : Windows-only
+{-# LANGUAGE CPP #-}
+
module WindowsEnv.Utils
( notifyEnvironmentUpdate
) where
@@ -14,7 +16,9 @@ import qualified Graphics.Win32.GDI.Types as WinAPI
import qualified Graphics.Win32.Message as WinAPI
import qualified System.Win32.Types as WinAPI
-foreign import ccall "Windows.h SendNotifyMessageW"
+#include "ccall.h"
+
+foreign import WINDOWS_ENV_CCALL "Windows.h SendNotifyMessageW"
c_SendNotifyMessage :: WinAPI.HWND -> WinAPI.WindowMessage -> WinAPI.WPARAM -> WinAPI.LPARAM -> IO WinAPI.LRESULT
notifyEnvironmentUpdate :: IO ()
diff --git a/src/WindowsEnv/ccall.h b/src/WindowsEnv/ccall.h
new file mode 100644
index 0000000..541cd5e
--- /dev/null
+++ b/src/WindowsEnv/ccall.h
@@ -0,0 +1,13 @@
+#ifndef WINDOWS_ENV_CCALL_H
+#define WINDOWS_ENV_CCALL_H
+
+#if defined(i386_HOST_ARCH)
+#define WINDOWS_ENV_CCALL stdcall
+#elif defined(x86_64_HOST_ARCH)
+#define WINDOWS_ENV_CCALL ccall
+#else
+#define WINDOWS_ENV_CCALL ccall
+#warning "Unsupported architecture"
+#endif
+
+#endif