blockio 0.1.0.1 → 0.1.1.0
raw patch · 6 files changed
+85/−10 lines, 6 filesdep ~unixPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: unix
API changes (from Hackage documentation)
Files
- CHANGELOG.md +8/−1
- blockio.cabal +10/−6
- src-linux/System/FS/BlockIO/Internal.hs +3/−2
- src-linux/System/FS/BlockIO/Internal/Fcntl.hsc +38/−0
- src-macos/System/FS/BlockIO/Internal.hs +1/−1
- src-macos/System/FS/BlockIO/Internal/Fcntl.hsc +25/−0
CHANGELOG.md view
@@ -1,8 +1,15 @@ # Revision history for blockio +## 0.1.1.0 -- 2025-12-03++* NON-BREAKING: Support `unix-2.8.6` by vendoring code related to file caching+ from the `unix` package. See PR+ [#805](https://github.com/IntersectMBO/lsm-tree/pull/805).+ ## 0.1.0.1 -- 2025-07-15 -* Include the README in the distributed files.+* PATCH: Include the README in the distributed files. See PR+ [#787](https://github.com/IntersectMBO/lsm-tree/pull/787). ## 0.1.0.0 -- 2025-07-15
blockio.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: blockio-version: 0.1.0.1+version: 0.1.1.0 synopsis: Perform batches of disk I/O operations. description: Perform batches of disk I\/O operations. Performing batches of disk I\/O can@@ -46,7 +46,7 @@ type: git location: https://github.com/IntersectMBO/lsm-tree subdir: blockio- tag: blockio-0.1.0.1+ tag: blockio-0.1.1.0 common warnings ghc-options:@@ -93,8 +93,10 @@ if os(linux) hs-source-dirs: src-linux- other-modules: System.FS.BlockIO.Internal- build-depends: unix ^>=2.8.7+ build-depends: unix ^>=2.8.6+ other-modules:+ System.FS.BlockIO.Internal+ System.FS.BlockIO.Internal.Fcntl if !flag(serialblockio) other-modules: System.FS.BlockIO.Async@@ -102,8 +104,10 @@ elif os(osx) hs-source-dirs: src-macos- build-depends: unix ^>=2.8.7- other-modules: System.FS.BlockIO.Internal+ build-depends: unix ^>=2.8.6+ other-modules:+ System.FS.BlockIO.Internal+ System.FS.BlockIO.Internal.Fcntl elif os(windows) hs-source-dirs: src-windows
src-linux/System/FS/BlockIO/Internal.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-}- module System.FS.BlockIO.Internal ( ioHasBlockIO ) where@@ -7,10 +6,12 @@ import qualified System.FS.API as FS import System.FS.API (FsPath, Handle (..), HasFS) import System.FS.BlockIO.API (Advice (..), FileOffset, HasBlockIO)+import qualified System.FS.BlockIO.Internal.Fcntl as Fcntl import qualified System.FS.BlockIO.IO.Internal as IOI import System.FS.IO (HandleIO) import qualified System.FS.IO.Handle as FS-import qualified System.Posix.Fcntl as Fcntl+import qualified System.Posix.Fcntl as Fcntl (Advice (..), fileAdvise,+ fileAllocate) import qualified System.Posix.Files as Unix import qualified System.Posix.Unistd as Unix
+ src-linux/System/FS/BlockIO/Internal/Fcntl.hsc view
@@ -0,0 +1,38 @@+{-# LANGUAGE CPP #-}+-- | Compatibility layer for the @unix@ package to provide a @fileSetCaching@ function.+--+-- @unix >= 2.8.7@ defines a @fileSetCaching@ function, but @unix < 2.8.7@ does not. This module defines the function for @unix@ versions @< 2.8.7@. The implementation is adapted from https://github.com/haskell/unix/blob/v2.8.8.0/System/Posix/Fcntl.hsc#L116-L182.+--+-- NOTE: in the future if we no longer support @unix@ versions @< 2.8.7@, then this module can be removed.+module System.FS.BlockIO.Internal.Fcntl (fileSetCaching) where++#if MIN_VERSION_unix(2,8,7)++import System.Posix.Fcntl (fileSetCaching)++#else++-- hsc2hs does not define _GNU_SOURCE, so a .hsc file must define it explicitly+-- or O_DIRECT stays hidden. The unix package doesn’t define it in source, but+-- its configure script calls AC_USE_SYSTEM_EXTENSIONS, which adds -D_GNU_SOURCE+-- to the build CFLAGS, and those flags are passed on to hsc2hs through the+-- generated `config.mk`.+#define _GNU_SOURCE++#include <fcntl.h>++import Data.Bits (complement, (.&.), (.|.))+import Foreign.C (throwErrnoIfMinus1, throwErrnoIfMinus1_)+import System.Posix.Internals+import System.Posix.Types (Fd (Fd))++-- | For simplification, we considered that Linux !HAS_F_NOCACHE and HAS_O_DIRECT+fileSetCaching :: Fd -> Bool -> IO ()+fileSetCaching (Fd fd) val = do+ r <- throwErrnoIfMinus1 "fileSetCaching" (c_fcntl_read fd #{const F_GETFL})+ let r' | val = fromIntegral r .&. complement opt_val+ | otherwise = fromIntegral r .|. opt_val+ throwErrnoIfMinus1_ "fileSetCaching" (c_fcntl_write fd #{const F_SETFL} r')+ where+ opt_val = #{const O_DIRECT}+#endif
src-macos/System/FS/BlockIO/Internal.hs view
@@ -5,11 +5,11 @@ import qualified System.FS.API as FS import System.FS.API (FsPath, Handle (..), HasFS) import System.FS.BlockIO.API (Advice (..), FileOffset, HasBlockIO)+import qualified System.FS.BlockIO.Internal.Fcntl as Unix import qualified System.FS.BlockIO.IO.Internal as IOI import qualified System.FS.BlockIO.Serial as Serial import System.FS.IO (HandleIO) import qualified System.FS.IO.Handle as FS-import qualified System.Posix.Fcntl as Unix import qualified System.Posix.Files as Unix import qualified System.Posix.Unistd as Unix
+ src-macos/System/FS/BlockIO/Internal/Fcntl.hsc view
@@ -0,0 +1,25 @@+{-# LANGUAGE CPP #-}+-- | Compatibility layer for the @unix@ package to provide a @fileSetCaching@ function.+--+-- @unix >= 2.8.7@ defines a @fileSetCaching@ function, but @unix < 2.8.7@ does not. This module defines the function for @unix@ versions @< 2.8.7@. The implementation is adapted from https://github.com/haskell/unix/blob/v2.8.8.0/System/Posix/Fcntl.hsc#L116-L182.+--+-- NOTE: in the future if we no longer support @unix@ versions @< 2.8.7@, then this module can be removed.+module System.FS.BlockIO.Internal.Fcntl (fileSetCaching) where++#if MIN_VERSION_unix(2,8,7)++import System.Posix.Fcntl (fileSetCaching)++#else++#include <fcntl.h>++import Foreign.C (throwErrnoIfMinus1_)+import System.Posix.Internals+import System.Posix.Types (Fd (Fd))++-- | For simplification, we considered that MacOS HAS_F_NOCACHE and !HAS_O_DIRECT+fileSetCaching :: Fd -> Bool -> IO ()+fileSetCaching (Fd fd) val = do+ throwErrnoIfMinus1_ "fileSetCaching" (c_fcntl_write fd #{const F_NOCACHE} (if val then 0 else 1))+#endif