1{-# LANGUAGE CPP #-} 2{-# LANGUAGE DerivingStrategies #-} 3{-# LANGUAGE GeneralizedNewtypeDeriving #-} 4{-# LANGUAGE MagicHash #-} 5{-# LANGUAGE NoImplicitPrelude #-} 6{-# LANGUAGE StandaloneDeriving #-} 7{-# LANGUAGE Trustworthy #-} 8 9----------------------------------------------------------------------------- 10-- | 11-- Module : System.Posix.Types 12-- Copyright : (c) The University of Glasgow 2002 13-- License : BSD-style (see the file libraries/base/LICENSE) 14-- 15-- Maintainer : libraries@haskell.org 16-- Stability : provisional 17-- Portability : non-portable (requires POSIX) 18-- 19-- POSIX data types: Haskell equivalents of the types defined by the 20-- @\<sys\/types.h>@ C header on a POSIX system. 21-- 22----------------------------------------------------------------------------- 23#include "HsBaseConfig.h" 24 25module System.Posix.Types ( 26 27 -- * POSIX data types 28 29 -- ** Platform differences 30 -- | This module contains platform specific information about types. 31 -- __/As such the types presented on this page reflect the platform 32 -- on which the documentation was generated and may not coincide with 33 -- the types on your platform./__ 34#if defined(HTYPE_DEV_T) 35 CDev(..), 36#endif 37#if defined(HTYPE_INO_T) 38 CIno(..), 39#endif 40#if defined(HTYPE_MODE_T) 41 CMode(..), 42#endif 43#if defined(HTYPE_OFF_T) 44 COff(..), 45#endif 46#if defined(HTYPE_PID_T) 47 CPid(..), 48#endif 49#if defined(HTYPE_SSIZE_T) 50 CSsize(..), 51#endif 52 53#if defined(HTYPE_GID_T) 54 CGid(..), 55#endif 56#if defined(HTYPE_NLINK_T) 57 CNlink(..), 58#endif 59#if defined(HTYPE_UID_T) 60 CUid(..), 61#endif 62#if defined(HTYPE_CC_T) 63 CCc(..), 64#endif 65#if defined(HTYPE_SPEED_T) 66 CSpeed(..), 67#endif 68#if defined(HTYPE_TCFLAG_T) 69 CTcflag(..), 70#endif 71#if defined(HTYPE_RLIM_T) 72 CRLim(..), 73#endif 74#if defined(HTYPE_BLKSIZE_T) 75 CBlkSize(..), 76#endif 77#if defined(HTYPE_BLKCNT_T) 78 CBlkCnt(..), 79#endif 80#if defined(HTYPE_CLOCKID_T) 81 CClockId(..), 82#endif 83#if defined(HTYPE_FSBLKCNT_T) 84 CFsBlkCnt(..), 85#endif 86#if defined(HTYPE_FSFILCNT_T) 87 CFsFilCnt(..), 88#endif 89#if defined(HTYPE_ID_T) 90 CId(..), 91#endif 92#if defined(HTYPE_KEY_T) 93 CKey(..), 94#endif 95#if defined(HTYPE_TIMER_T) 96 CTimer(..), 97#endif 98#if defined(HTYPE_SOCKLEN_T) 99 CSocklen(..), 100#endif 101#if defined(HTYPE_NFDS_T) 102 CNfds(..), 103#endif 104 105 Fd(..), 106 107 -- See Note [Exporting constructors of marshallable foreign types] 108 -- in Foreign.Ptr for why the constructors for these newtypes are 109 -- exported. 110 111#if defined(HTYPE_NLINK_T) 112 LinkCount, 113#endif 114#if defined(HTYPE_UID_T) 115 UserID, 116#endif 117#if defined(HTYPE_GID_T) 118 GroupID, 119#endif 120 121 ByteCount, 122 ClockTick, 123 EpochTime, 124 FileOffset, 125 ProcessID, 126 ProcessGroupID, 127 DeviceID, 128 FileID, 129 FileMode, 130 Limit 131 ) where 132 133import Foreign 134import Foreign.C 135-- import Data.Bits 136 137import GHC.Base 138import GHC.Enum 139import GHC.Num 140import GHC.Real 141-- import GHC.Prim 142import GHC.Read 143import GHC.Show 144 145#include "CTypes.h" 146 147#if defined(HTYPE_DEV_T) 148INTEGRAL_TYPE(CDev,HTYPE_DEV_T) 149#endif 150#if defined(HTYPE_INO_T) 151INTEGRAL_TYPE(CIno,HTYPE_INO_T) 152#endif 153#if defined(HTYPE_MODE_T) 154INTEGRAL_TYPE_WITH_CTYPE(CMode,mode_t,HTYPE_MODE_T) 155#endif 156#if defined(HTYPE_OFF_T) 157INTEGRAL_TYPE(COff,HTYPE_OFF_T) 158#endif 159#if defined(HTYPE_PID_T) 160INTEGRAL_TYPE(CPid,HTYPE_PID_T) 161#endif 162 163#if defined(HTYPE_SSIZE_T) 164INTEGRAL_TYPE(CSsize,HTYPE_SSIZE_T) 165#endif 166 167#if defined(HTYPE_GID_T) 168INTEGRAL_TYPE(CGid,HTYPE_GID_T) 169#endif 170#if defined(HTYPE_NLINK_T) 171INTEGRAL_TYPE(CNlink,HTYPE_NLINK_T) 172#endif 173 174#if defined(HTYPE_UID_T) 175INTEGRAL_TYPE(CUid,HTYPE_UID_T) 176#endif 177#if defined(HTYPE_CC_T) 178ARITHMETIC_TYPE(CCc,HTYPE_CC_T) 179#endif 180#if defined(HTYPE_SPEED_T) 181ARITHMETIC_TYPE(CSpeed,HTYPE_SPEED_T) 182#endif 183#if defined(HTYPE_TCFLAG_T) 184INTEGRAL_TYPE(CTcflag,HTYPE_TCFLAG_T) 185#endif 186#if defined(HTYPE_RLIM_T) 187INTEGRAL_TYPE(CRLim,HTYPE_RLIM_T) 188#endif 189 190#if defined(HTYPE_BLKSIZE_T) 191-- | @since 4.10.0.0 192INTEGRAL_TYPE_WITH_CTYPE(CBlkSize,blksize_t,HTYPE_BLKSIZE_T) 193#endif 194#if defined(HTYPE_BLKCNT_T) 195-- | @since 4.10.0.0 196INTEGRAL_TYPE_WITH_CTYPE(CBlkCnt,blkcnt_t,HTYPE_BLKCNT_T) 197#endif 198#if defined(HTYPE_CLOCKID_T) 199-- | @since 4.10.0.0 200INTEGRAL_TYPE_WITH_CTYPE(CClockId,clockid_t,HTYPE_CLOCKID_T) 201#endif 202#if defined(HTYPE_FSBLKCNT_T) 203-- | @since 4.10.0.0 204INTEGRAL_TYPE_WITH_CTYPE(CFsBlkCnt,fsblkcnt_t,HTYPE_FSBLKCNT_T) 205#endif 206#if defined(HTYPE_FSFILCNT_T) 207-- | @since 4.10.0.0 208INTEGRAL_TYPE_WITH_CTYPE(CFsFilCnt,fsfilcnt_t,HTYPE_FSFILCNT_T) 209#endif 210#if defined(HTYPE_ID_T) 211-- | @since 4.10.0.0 212INTEGRAL_TYPE_WITH_CTYPE(CId,id_t,HTYPE_ID_T) 213#endif 214#if defined(HTYPE_KEY_T) 215-- | @since 4.10.0.0 216INTEGRAL_TYPE_WITH_CTYPE(CKey,key_t,HTYPE_KEY_T) 217#endif 218#if defined(HTYPE_TIMER_T) 219-- | @since 4.10.0.0 220OPAQUE_TYPE_WITH_CTYPE(CTimer,timer_t,HTYPE_TIMER_T) 221#endif 222 223#if defined(HTYPE_SOCKLEN_T) 224-- | @since 4.14.0.0 225INTEGRAL_TYPE(CSocklen,HTYPE_SOCKLEN_T) 226#endif 227#if defined(HTYPE_NFDS_T) 228-- | @since 4.14.0.0 229INTEGRAL_TYPE(CNfds,HTYPE_NFDS_T) 230#endif 231 232-- Make an Fd type rather than using CInt everywhere 233INTEGRAL_TYPE(Fd,CInt) 234 235-- nicer names, and backwards compatibility with POSIX library: 236#if defined(HTYPE_NLINK_T) 237type LinkCount = CNlink 238#endif 239#if defined(HTYPE_UID_T) 240type UserID = CUid 241#endif 242#if defined(HTYPE_GID_T) 243type GroupID = CGid 244#endif 245 246type ByteCount = CSize 247type ClockTick = CClock 248type EpochTime = CTime 249type DeviceID = CDev 250type FileID = CIno 251type FileMode = CMode 252type ProcessID = CPid 253type FileOffset = COff 254type ProcessGroupID = CPid 255type Limit = CLong 256