{-# LANGUAGE CPP #-} module Erebos.Storage.Platform ( createFileExclusive, ) where import System.IO import System.Posix.Files import System.Posix.IO createFileExclusive :: FilePath -> IO Handle createFileExclusive :: FilePath -> IO Handle createFileExclusive FilePath path = Fd -> IO Handle fdToHandle (Fd -> IO Handle) -> IO Fd -> IO Handle forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< do #if MIN_VERSION_unix(2,8,0) FilePath -> OpenMode -> OpenFileFlags -> IO Fd openFd FilePath path OpenMode WriteOnly OpenFileFlags defaultFileFlags { creat = Just $ unionFileModes ownerReadMode ownerWriteMode , exclusive = True } #else openFd path WriteOnly (Just $ unionFileModes ownerReadMode ownerWriteMode) (defaultFileFlags { exclusive = True }) #endif