module System.Socket.Address.SockAddrUn
( SockAddrUn (..)
) where
import Data.Word
import qualified Data.ByteString as BS
import Foreign.Ptr
import Foreign.Storable
import Foreign.Marshal.Utils
import System.Socket.Address
import System.Socket.Internal.FFI
instance Address SockAddrUn where
addressFamilyNumber _ = (1)
data SockAddrUn
= SockAddrUn
{ sunPath :: BS.ByteString
} deriving (Eq, Ord, Show)
instance Storable SockAddrUn where
sizeOf _ = ((110))
alignment _ = (2)
peek ptr = do
path <- BS.packCString (sun_path ptr) :: IO BS.ByteString
return (SockAddrUn path)
where
sun_path = ((\hsc_ptr -> hsc_ptr `plusPtr` 2))
poke ptr (SockAddrUn path) = do
c_memset ptr 0 (110)
BS.useAsCString truncatedPath $ \cs-> do
copyBytes (sun_path ptr) cs (BS.length truncatedPath + 1)
where
sun_path = ((\hsc_ptr -> hsc_ptr `plusPtr` 2))
truncatedPath = BS.take ( sizeOf (undefined :: SockAddrUn)
sizeOf (undefined :: Word16)
1 ) path