Cabal-1.6.0.1: Distribution/Compat/Permissions.hs
{-# OPTIONS -cpp #-}
-- OPTIONS required for ghc-6.4.x compat, and must appear first
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -cpp #-}
{-# OPTIONS_NHC98 -cpp #-}
{-# OPTIONS_JHC -fcpp #-}
module Distribution.Compat.Permissions (copyPermissions) where
#ifndef __NHC__
import Foreign
import Foreign.C
import System.Posix.Internals
copyPermissions :: FilePath -> FilePath -> IO ()
copyPermissions source dest = do
allocaBytes sizeof_stat $ \ p_stat -> do
withCString source $ \p_source -> do
withCString dest $ \p_dest -> do
throwErrnoIfMinus1_ "copyPermissions" $ c_stat p_source p_stat
mode <- st_mode p_stat
throwErrnoIfMinus1_ "copyPermissions" $ c_chmod p_dest mode
#else
import Directory (Permissions(..),getPermissions,setPermissions)
-- The nhc98 version of this function is broken. (But it is the way ghc
-- and Hugs implemented it too, until 2008-09-13.) Unfortunately, nhc98
-- does not have System.Posix.Internals, so cannot (yet) do it correctly.
copyPermissions :: FilePath -> FilePath -> IO ()
copyPermissions source dest = do
perms <- getPermissions source
setPermissions dest perms
#endif