LGTM

On Mon, Jul 07, 2014 at 12:25:58PM +0200, 'Klaus Aehlig' via ganeti-devel wrote:
> The function fsync(2) is not packaged in any package we currently
> depend on, but we need it nevertheless. For a single function, however,
> it is easier, also for people trying to build Ganeti, to just do the
> foreign function call ourselves, instead of depending on yet another
> package.
> 
> Signed-off-by: Klaus Aehlig <[email protected]>
> ---
>  Makefile.am                |  1 +
>  src/Ganeti/Utils/UniStd.hs | 50 
> ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 51 insertions(+)
>  create mode 100644 src/Ganeti/Utils/UniStd.hs
> 
> diff --git a/Makefile.am b/Makefile.am
> index 60c04f4..44f88e6 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -870,6 +870,7 @@ HS_LIB_SRCS = \
>       src/Ganeti/Utils/MVarLock.hs \
>       src/Ganeti/Utils/Random.hs \
>       src/Ganeti/Utils/Statistics.hs \
> +     src/Ganeti/Utils/UniStd.hs \
>       src/Ganeti/Utils/Validate.hs \
>       src/Ganeti/VCluster.hs \
>       src/Ganeti/WConfd/ConfigState.hs \
> diff --git a/src/Ganeti/Utils/UniStd.hs b/src/Ganeti/Utils/UniStd.hs
> new file mode 100644
> index 0000000..ae804ce
> --- /dev/null
> +++ b/src/Ganeti/Utils/UniStd.hs
> @@ -0,0 +1,50 @@
> +{-# LANGUAGE ForeignFunctionInterface #-}
> +
> +{-| Necessary foreign function calls
> +
> +...with foreign functions declared in unistd.h
> +
> +-}
> +
> +{-
> +
> +Copyright (C) 2014 Google Inc.
> +
> +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 2 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 Street, Fifth Floor, Boston, MA
> +02110-1301, USA.
> +
> +-}
> +
> +module Ganeti.Utils.UniStd
> +  ( hCloseAndFsync
> +  ) where
> +
> +import Foreign.C
> +import System.IO
> +import System.IO.Error
> +import System.Posix.IO
> +import System.Posix.Types
> +
> +foreign import ccall "fsync" fsync :: CInt -> IO CInt
> +
> +
> +-- | Flush, close and fsync(2) a file handle.
> +hCloseAndFsync :: Handle -> IO ()
> +hCloseAndFsync handle = do
> +  Fd fd <- handleToFd handle -- side effect of closing the handle and 
> flushing
> +                             -- its write buffer, if necessary.
> +  _ <- fsync fd
> +  _ <- tryIOError $ closeFd (Fd fd)
> +  return ()
> -- 
> 2.0.0.526.g5318336
> 

Reply via email to