    {-# LINE 1 "Debian/Dpkg/PkgSpec.hsc" #-}
    {-
    {-# LINE 2 "Debian/Dpkg/PkgSpec.hsc" #-}
     PkgSpec.hsc: Haskell bindings to libdpkg
       Copyright (C) 2012 Clint Adams

     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 3 of the License, or
     (at your option) any later version.

     This program 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 General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
    -}

    {-# LANGUAGE CPP, ForeignFunctionInterface #-}

    {-# LINE 23 "Debian/Dpkg/PkgSpec.hsc" #-}

    module Debian.Dpkg.PkgSpec (
      pkgSpecParsePkg
    ) where
    import Foreign.Ptr (Ptr,FunPtr,plusPtr)
    import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
    import Foreign.Storable
    import Foreign.C.Types
    import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
    import Foreign.Marshal.Alloc (alloca)
    import Foreign.Marshal.Array (peekArray,pokeArray)
    import Data.Int
    import Data.Word

    {-# LINE 28 "Debian/Dpkg/PkgSpec.hsc" #-}

    import Foreign.Ptr (nullPtr)
    import Foreign.C.String (withCString, peekCString)
    import Foreign.Marshal.Utils (with)
    import Control.Monad (liftM, join)
    import Control.Monad.Loops (unfoldrM)
    import qualified Data.ByteString as BS
    import Debian.Dpkg.Types

    {-# LINE 38 "Debian/Dpkg/PkgSpec.hsc" #-}

    type FIXME = C'dpkg_error
    foreign import ccall unsafe "pkg_spec_parse_pkg" c'pkg_spec_parse_pkg
      :: CString -> Ptr FIXME -> IO (Ptr C'pkginfo)
    foreign import ccall unsafe "&pkg_spec_parse_pkg" p'pkg_spec_parse_pkg
      :: FunPtr (CString -> Ptr FIXME -> IO (Ptr C'pkginfo))

    {-# LINE 41 "Debian/Dpkg/PkgSpec.hsc" #-}

    -- FIXME: if NULL return, handle error
    pkgSpecParsePkg :: String -> IO C'pkginfo
    pkgSpecParsePkg p = alloca $ \derr -> withCString p (\pcstr -> c'pkg_spec_parse_pkg pcstr derr) >>= peek