11{-# LANGUAGE CApiFFI #-}
22{-# LANGUAGE RecordWildCards #-}
33{-# LANGUAGE Trustworthy #-}
4+ {-# LANGUAGE ViewPatterns #-}
45{-# LANGUAGE PatternSynonyms #-}
56{-# LANGUAGE GeneralizedNewtypeDeriving #-}
67{-# LANGUAGE NumDecimals #-}
@@ -858,7 +859,12 @@ defaultStatxFlags = mempty
858859--
859860-- See the pattern synonyms for possible masks. These are combined via @(<>)@.
860861-- Masks can be tested via `(.&.)`.
861- newtype StatxMask = StatxMask CUInt deriving (Read , Show , Eq , Ord , Integral , Num , Enum , Bits , Real )
862+ newtype StatxMask = StatxMaskUnsigned CUInt deriving (Read , Show , Eq , Ord , Integral , Num , Enum , Bits , Real )
863+
864+ -- | Only for backwards compat. Please use 'StatxMaskUnsigned'
865+ pattern StatxMask :: CInt -> StatxMask
866+ pattern StatxMask x <- StatxMaskUnsigned (fromIntegral -> x) where
867+ StatxMask x = StatxMaskUnsigned (fromIntegral x)
862868
863869-- | ORs the masks.
864870instance Semigroup StatxMask where
@@ -871,121 +877,121 @@ instance Monoid StatxMask where
871877-- | Want @stx_mode & S_IFMT@.
872878pattern StatxType :: StatxMask
873879#ifdef STATX_TYPE
874- pattern StatxType = StatxMask (# const STATX_TYPE )
880+ pattern StatxType = StatxMaskUnsigned (# const STATX_TYPE )
875881#else
876- pattern StatxType = StatxMask 0
882+ pattern StatxType = StatxMaskUnsigned 0
877883#endif
878884
879885-- | Want @stx_mode & ~S_IFMT@.
880886pattern StatxMode :: StatxMask
881887#ifdef STATX_MODE
882- pattern StatxMode = StatxMask (# const STATX_MODE )
888+ pattern StatxMode = StatxMaskUnsigned (# const STATX_MODE )
883889#else
884- pattern StatxMode = StatxMask 0
890+ pattern StatxMode = StatxMaskUnsigned 0
885891#endif
886892
887893-- | Want @stx_nlink@.
888894pattern StatxNlink :: StatxMask
889895#ifdef STATX_NLINK
890- pattern StatxNlink = StatxMask (# const STATX_NLINK )
896+ pattern StatxNlink = StatxMaskUnsigned (# const STATX_NLINK )
891897#else
892- pattern StatxNlink = StatxMask 0
898+ pattern StatxNlink = StatxMaskUnsigned 0
893899#endif
894900
895901-- | Want @stx_uid@.
896902pattern StatxUid :: StatxMask
897903#ifdef STATX_UID
898- pattern StatxUid = StatxMask (# const STATX_UID )
904+ pattern StatxUid = StatxMaskUnsigned (# const STATX_UID )
899905#else
900- pattern StatxUid = StatxMask 0
906+ pattern StatxUid = StatxMaskUnsigned 0
901907#endif
902908
903909-- | Want @stx_gid@.
904910pattern StatxGid :: StatxMask
905911#ifdef STATX_GID
906- pattern StatxGid = StatxMask (# const STATX_GID )
912+ pattern StatxGid = StatxMaskUnsigned (# const STATX_GID )
907913#else
908- pattern StatxGid = StatxMask 0
914+ pattern StatxGid = StatxMaskUnsigned 0
909915#endif
910916
911917-- | Want @stx_atime@.
912918pattern StatxAtime :: StatxMask
913919#ifdef STATX_ATIME
914- pattern StatxAtime = StatxMask (# const STATX_ATIME )
920+ pattern StatxAtime = StatxMaskUnsigned (# const STATX_ATIME )
915921#else
916- pattern StatxAtime = StatxMask 0
922+ pattern StatxAtime = StatxMaskUnsigned 0
917923#endif
918924
919925-- | Want @stx_mtime@.
920926pattern StatxMtime :: StatxMask
921927#ifdef STATX_MTIME
922- pattern StatxMtime = StatxMask (# const STATX_MTIME )
928+ pattern StatxMtime = StatxMaskUnsigned (# const STATX_MTIME )
923929#else
924- pattern StatxMtime = StatxMask 0
930+ pattern StatxMtime = StatxMaskUnsigned 0
925931#endif
926932
927933-- | Want @stx_ctime@.
928934pattern StatxCtime :: StatxMask
929935#ifdef STATX_CTIME
930- pattern StatxCtime = StatxMask (# const STATX_CTIME )
936+ pattern StatxCtime = StatxMaskUnsigned (# const STATX_CTIME )
931937#else
932- pattern StatxCtime = StatxMask 0
938+ pattern StatxCtime = StatxMaskUnsigned 0
933939#endif
934940
935941-- | Want @stx_btime@.
936942pattern StatxBtime :: StatxMask
937943#ifdef STATX_BTIME
938- pattern StatxBtime = StatxMask (# const STATX_BTIME )
944+ pattern StatxBtime = StatxMaskUnsigned (# const STATX_BTIME )
939945#else
940- pattern StatxBtime = StatxMask 0
946+ pattern StatxBtime = StatxMaskUnsigned 0
941947#endif
942948
943949-- | Want @stx_mnt_id@.
944950pattern StatxMntId :: StatxMask
945951#ifdef HAVE_STATX_MNT_ID
946- pattern StatxMntId = StatxMask (# const STATX_MNT_ID )
952+ pattern StatxMntId = StatxMaskUnsigned (# const STATX_MNT_ID )
947953#else
948- pattern StatxMntId = StatxMask 0
954+ pattern StatxMntId = StatxMaskUnsigned 0
949955#endif
950956
951957-- | Want @stx_ino@.
952958pattern StatxIno :: StatxMask
953959#ifdef STATX_INO
954- pattern StatxIno = StatxMask (# const STATX_INO )
960+ pattern StatxIno = StatxMaskUnsigned (# const STATX_INO )
955961#else
956- pattern StatxIno = StatxMask 0
962+ pattern StatxIno = StatxMaskUnsigned 0
957963#endif
958964
959965-- | Want @stx_size@.
960966pattern StatxSize :: StatxMask
961967#ifdef STATX_SIZE
962- pattern StatxSize = StatxMask (# const STATX_SIZE )
968+ pattern StatxSize = StatxMaskUnsigned (# const STATX_SIZE )
963969#else
964- pattern StatxSize = StatxMask 0
970+ pattern StatxSize = StatxMaskUnsigned 0
965971#endif
966972
967973-- | Want @stx_blocks@.
968974pattern StatxBlocks :: StatxMask
969975#ifdef STATX_BLOCKS
970- pattern StatxBlocks = StatxMask (# const STATX_BLOCKS )
976+ pattern StatxBlocks = StatxMaskUnsigned (# const STATX_BLOCKS )
971977#else
972- pattern StatxBlocks = StatxMask 0
978+ pattern StatxBlocks = StatxMaskUnsigned 0
973979#endif
974980
975981-- | Want all of the above.
976982pattern StatxBasicStats :: StatxMask
977983#ifdef STATX_BASIC_STATS
978- pattern StatxBasicStats = StatxMask (# const STATX_BASIC_STATS )
984+ pattern StatxBasicStats = StatxMaskUnsigned (# const STATX_BASIC_STATS )
979985#else
980- pattern StatxBasicStats = StatxMask 0
986+ pattern StatxBasicStats = StatxMaskUnsigned 0
981987#endif
982988
983989-- | Want all currently available fields.
984990pattern StatxAll :: StatxMask
985991#ifdef STATX_ALL
986- pattern StatxAll = StatxMask (# const STATX_ALL )
992+ pattern StatxAll = StatxMaskUnsigned (# const STATX_ALL )
987993#else
988- pattern StatxAll = StatxMask 0
994+ pattern StatxAll = StatxMaskUnsigned 0
989995#endif
990996
991997
@@ -1010,7 +1016,7 @@ newtype ExtendedFileStatus = ExtendedFileStatus (ForeignPtr CStatx) -- ^ The con
10101016-- @since 2.8.9.0
10111017supportsStatxMask :: ExtendedFileStatus -> StatxMask -> Bool
10121018#if HAVE_STATX
1013- supportsStatxMask (ExtendedFileStatus statx) (StatxMask masks) = unsafePerformIO $ do
1019+ supportsStatxMask (ExtendedFileStatus statx) (StatxMaskUnsigned masks) = unsafePerformIO $ do
10141020 statxMask <- withForeignPtr statx $ (# peek struct statx, stx_mask) :: IO CUInt
10151021 pure $ (statxMask .&. masks) /= 0
10161022#else
@@ -1423,7 +1429,7 @@ getExtendedFileStatus_ :: Maybe Fd -- ^ Optional directory file descriptor
14231429 -> StatxMask
14241430 -> IO ExtendedFileStatus
14251431#ifdef HAVE_STATX
1426- getExtendedFileStatus_ fdMay str (StatxFlags flags) (StatxMask masks) = do
1432+ getExtendedFileStatus_ fdMay str (StatxFlags flags) (StatxMaskUnsigned masks) = do
14271433 fp <- mallocForeignPtrBytes (# const sizeof(struct statx))
14281434 withForeignPtr fp $ \ p ->
14291435 throwErrnoIfMinus1_ " getExtendedFileStatus_" (c_statx c_fd str flags masks p)
0 commit comments