    -- GENERATED by C->Haskell Compiler, version 0.13.5 (gtk2hs branch) "Bin IO", 13 Nov 2004 (Haskell)
    -- Edit the ORIGNAL .chs file instead!

    {-# LINE 1 "./System/Glib/GString.chs" #-}
    -- -*-haskell-*-
    --  GIMP Toolkit (GTK)
    --
    --  Author : Andreas Baldeau
    --
    --  Created: 14 November 2010
    --
    --  Copyright (C) 2010 Andreas Baldeau
    --
    --  This library 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 2.1 of the License, or (at your option) any later version.
    --
    --  This library 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.
    --
    -- |
    -- Maintainer  : gtk2hs-users@lists.sourceforge.net
    -- Stability   : provisional
    -- Portability : portable (depends on GHC)
    --
    -- Defines functions to extract data from a GString.
    --
    module System.Glib.GString (
      GString,
      readGString,
      fromGString,
      ) where

    import Foreign
    import Control.Exception	(bracket)
    import Control.Monad		(foldM)

    import System.Glib.FFI

    {-# LINE 39 "./System/Glib/GString.chs" #-}

    type GString = Ptr (())
    {-# LINE 41 "./System/Glib/GString.chs" #-}

    -- methods

    -- Turn a GString into a String but don't destroy it.
    --
    readGString :: GString -> IO (Maybe String)
    readGString gstring
      | gstring == nullPtr = return Nothing
      | otherwise	       = do
        gstr <- (\ptr -> do {peekByteOff ptr 0 ::IO (Ptr CChar)}) gstring
        maybePeek peekCString gstr

    -- Turn a GList into a list of pointers (freeing the GList in the process).
    --
    fromGString :: GString -> IO (Maybe String)
    fromGString gstring
      | gstring == nullPtr = return Nothing
      | otherwise	       = do
        gstr <- (\ptr -> do {peekByteOff ptr 0 ::IO (Ptr CChar)}) gstring
        str  <- maybePeek peekCString gstr
        _ <- g_string_free gstring $ fromBool True
        return str

    foreign import ccall unsafe "g_string_free"
      g_string_free :: ((Ptr ()) -> (CInt -> (IO (Ptr CChar))))