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