-- This file is part of Bindings-bfd.
--
-- Copyright (C) 2010 Michael Nelson
--
-- Bindings-bfd is free software: you can redistribute it and/or modify
-- it under the terms of the GNU Lesser General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- Bindings-bfd is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU Lesser General Public License for more details.

-- You should have received a copy of the GNU Lesser General Public License
-- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.

module Bindings.Bfd.Misc where

import Data.Bits

import Foreign.C
import Foreign.Ptr


type Bool' = CUInt

type Vma  = Int
type Vma' = CULong

type Size  = Int
type Size' = CULong

type File = Ptr File'
data File' = File'

type FilePtr  = Int
type FilePtr' = CULong


alignToPower
   :: Vma
   -> Int
   -> Vma
alignToPower vma power = (vma + mask) .&. (complement $ mask)
   where
      mask = shiftL 1 power - 1


foreign import ccall unsafe "stdio.h fdopen" c_fdopen
   :: CInt
   -> CString
   -> IO File

foreign import ccall unsafe "stdio.h fflush" c_fflush
   :: File
   -> IO CInt