summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2024-06-30 17:43:28 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2024-06-30 21:46:19 +0200
commit234feea88c2edd6eac5199c1223dd10d09badbd4 (patch)
treee364c90f88f00eb747e17e19d41cea2bd82ac47b
parent47b8396c94af75832d96e4d3b4e0d7001ff70388 (diff)
Windows support for filesystem storage
-rw-r--r--erebos.cabal6
-rw-r--r--src/windows/Erebos/Storage/Platform.hs13
2 files changed, 18 insertions, 1 deletions
diff --git a/erebos.cabal b/erebos.cabal
index 472811f..d8730b9 100644
--- a/erebos.cabal
+++ b/erebos.cabal
@@ -161,7 +161,11 @@ library
uuid >=1.3 && <1.4,
zlib >=0.6 && <0.8
- if true
+ if os(windows)
+ hs-source-dirs: src/windows
+ build-depends:
+ Win32 ^>= { 2.14 },
+ else
hs-source-dirs: src/unix
build-depends:
unix ^>= { 2.7, 2.8 },
diff --git a/src/windows/Erebos/Storage/Platform.hs b/src/windows/Erebos/Storage/Platform.hs
new file mode 100644
index 0000000..76c940b
--- /dev/null
+++ b/src/windows/Erebos/Storage/Platform.hs
@@ -0,0 +1,13 @@
+module Erebos.Storage.Platform (
+ createFileExclusive,
+) where
+
+import Data.Bits
+
+import System.IO
+import System.Win32.File
+import System.Win32.Types
+
+createFileExclusive :: FilePath -> IO Handle
+createFileExclusive path = do
+ hANDLEToHandle =<< createFile path gENERIC_WRITE (fILE_SHARE_READ .|. fILE_SHARE_DELETE) Nothing cREATE_NEW fILE_ATTRIBUTE_NORMAL Nothing