Skip to content

Commit e1ae56c

Browse files
committed
Use pattern synonym to not break API
1 parent c97ba79 commit e1ae56c

File tree

1 file changed

+39
-33
lines changed

1 file changed

+39
-33
lines changed

System/Posix/Files/Common.hsc

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
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.
864870
instance Semigroup StatxMask where
@@ -871,121 +877,121 @@ instance Monoid StatxMask where
871877
-- | Want @stx_mode & S_IFMT@.
872878
pattern 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@.
880886
pattern 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@.
888894
pattern 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@.
896902
pattern 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@.
904910
pattern 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@.
912918
pattern 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@.
920926
pattern 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@.
928934
pattern 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@.
936942
pattern 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@.
944950
pattern 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@.
952958
pattern 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@.
960966
pattern 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@.
968974
pattern 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.
976982
pattern 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.
984990
pattern 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
10111017
supportsStatxMask :: 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

Comments
 (0)