Add CTYPE annotations to ptr types used for FFI
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 30 Jan 2016 18:44:58 +0000 (19:44 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 30 Jan 2016 18:44:58 +0000 (19:44 +0100)
This avoids incompatible-pointer warnings from the c-compiler when using
`CApiFFI`

System/Posix/Directory/Common.hsc
System/Posix/IO/Common.hsc
System/Posix/Process/Common.hsc
System/Posix/Resource.hsc
System/Posix/Terminal/Common.hsc

index 4ea8f78..9fb5ac4 100644 (file)
@@ -39,8 +39,8 @@ import Foreign.C
 
 newtype DirStream = DirStream (Ptr CDir)
 
-type CDir       = ()
-type CDirent    = ()
+data {-# CTYPE "DIR" #-} CDir
+data {-# CTYPE "struct dirent" #-} CDirent
 
 -- | @rewindDirStream dp@ calls @rewinddir@ to reposition
 --   the directory stream @dp@ at the beginning of the directory.
index 198b3f1..eb4a721 100644 (file)
@@ -320,9 +320,7 @@ getLock (Fd fd) lock =
     maybeResult (_, (Unlock, _, _, _)) = Nothing
     maybeResult x = Just x
 
-type CFLock     = ()
-
-allocaLock :: FileLock -> (Ptr CFLock -> IO a) -> IO a
+allocaLock :: FileLock -> (Ptr Base.CFLock -> IO a) -> IO a
 allocaLock (lockreq, mode, start, len) io =
   allocaBytes (#const sizeof(struct flock)) $ \p -> do
     (#poke struct flock, l_type)   p (lockReq2Int lockreq :: CShort)
@@ -336,7 +334,7 @@ lockReq2Int ReadLock  = (#const F_RDLCK)
 lockReq2Int WriteLock = (#const F_WRLCK)
 lockReq2Int Unlock    = (#const F_UNLCK)
 
-bytes2ProcessIDAndLock :: Ptr CFLock -> IO (ProcessID, FileLock)
+bytes2ProcessIDAndLock :: Ptr Base.CFLock -> IO (ProcessID, FileLock)
 bytes2ProcessIDAndLock p = do
   req   <- (#peek struct flock, l_type)   p
   mode  <- (#peek struct flock, l_whence) p
index c13bf5e..ee7310e 100644 (file)
@@ -212,7 +212,7 @@ getProcessTimes = do
                            childSystemTime = cst
                           })
 
-type CTms = ()
+data {-# CTYPE "struct tms" #-} CTms
 
 foreign import capi unsafe "HsUnix.h times"
   c_times :: Ptr CTms -> IO CClock
index 4c5ca48..280c25f 100644 (file)
@@ -55,7 +55,7 @@ data ResourceLimit
   | ResourceLimit Integer
   deriving Eq
 
-type RLimit = ()
+data {-# CTYPE "struct rlimit" #-} RLimit
 
 foreign import ccall unsafe "HsUnix.h __hscore_getrlimit"
   c_getrlimit :: CInt -> Ptr RLimit -> IO CInt
index 68ce321..5d81ec5 100644 (file)
@@ -77,6 +77,7 @@ import Foreign.Ptr ( Ptr, plusPtr )
 import Foreign.Storable ( Storable(..) )
 import System.IO.Unsafe ( unsafePerformIO )
 import System.Posix.Types
+import System.Posix.Internals ( CTermios )
 
 #if !HAVE_TCDRAIN
 import System.IO.Error ( ioeSetLocation )
@@ -86,7 +87,6 @@ import GHC.IO.Exception ( unsupportedOperation )
 -- -----------------------------------------------------------------------------
 -- Terminal attributes
 
-type CTermios = ()
 newtype TerminalAttributes = TerminalAttributes (ForeignPtr CTermios)
 
 makeTerminalAttributes :: ForeignPtr CTermios -> TerminalAttributes