darcs-2.4: src/win32/System/Posix.hs
{-# OPTIONS_GHC -fglasgow-exts #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module System.Posix where
import Foreign.Ptr ( Ptr )
import Foreign.Storable ( peek )
import Foreign.C.Types ( CInt, CUInt, CULong, CTime )
import Foreign.C.String ( CString, withCString )
import Foreign.Marshal.Array ( withArray )
import Foreign.Marshal.Alloc ( alloca )
import System.Posix.Types ( EpochTime )
import System.IO ( Handle )
foreign import ccall "sys/utime.h _utime" c_utime :: CString -> Ptr CTime -> IO CInt
setFileTimes :: FilePath -> EpochTime -> EpochTime -> IO ()
setFileTimes path atime mtime = path `withCString` \s -> do
withArray [atime,mtime] $ \p -> do c_utime s p
return ()
foreign import ccall "time" c_ctime :: Ptr CTime -> IO CInt
epochTime :: IO EpochTime
epochTime = do
alloca $ \p -> do c_ctime p
t <- peek p :: IO CTime
return t
foreign import stdcall "winbase.h SleepEx" c_SleepEx :: CULong -> CUInt -> IO CInt
sleep :: Integer -> IO CInt
sleep n = c_SleepEx (1000 * fromIntegral n) 1
handleToFd :: Handle -> IO Int
handleToFd _ = fail "handleToFd not supported!"