    {-# OPTIONS_GHC -optc-D__USE_GNU #-}
    {-# LINE 1 "Foundation/System/Bindings/Linux.hsc" #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Foundation.System.Bindings.Linux
    -- Copyright   :  (c) Vincent Hanquez 2014-2017
    -- License     :  BSD-style
    --
    -- Maintainer  :  Vincent Hanquez
    -- Stability   :  provisional
    -- Portability :  non-portable (requires Linux)
    --
    -- Functions defined only for linux
    --
    -----------------------------------------------------------------------------
    {-# OPTIONS_HADDOCK hide #-}
    module Foundation.System.Bindings.Linux
       where

    import Basement.Compat.Base
    import Basement.Compat.C.Types
    import Foundation.System.Bindings.PosixDef

    type CInotifyFlags = CInt
    type CInotifyMask = CInt
    type CWatchDescriptor = CInt

    sysLinux_O_TMPFILE
        :: COpenFlags

    {-# LINE 35 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_O_TMPFILE   = (4259840)
    {-# LINE 36 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 39 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 41 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_NONBLOCK :: CInotifyFlags
    sysLinux_IN_NONBLOCK = (2048)
    {-# LINE 43 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 44 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 46 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_CLOEXEC :: CInotifyFlags
    sysLinux_IN_CLOEXEC  = (524288)
    {-# LINE 48 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 49 "Foundation/System/Bindings/Linux.hsc" #-}

    sysLinux_IN_ACCESS
        , sysLinux_IN_ATTRIB
        , sysLinux_IN_CLOSE_WRITE
        , sysLinux_IN_CLOSE_NOWRITE
        , sysLinux_IN_CREATE
        , sysLinux_IN_DELETE
        , sysLinux_IN_DELETE_SELF
        , sysLinux_IN_MODIFY
        , sysLinux_IN_MOVE_SELF
        , sysLinux_IN_MOVED_FROM
        , sysLinux_IN_MOVED_TO :: CInotifyMask
    sysLinux_IN_ACCESS = (1)
    {-# LINE 62 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_ATTRIB = (4)
    {-# LINE 63 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_CLOSE_WRITE = (8)
    {-# LINE 64 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_CLOSE_NOWRITE = (16)
    {-# LINE 65 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_CREATE = (256)
    {-# LINE 66 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_DELETE = (512)
    {-# LINE 67 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_DELETE_SELF = (1024)
    {-# LINE 68 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_MODIFY = (2)
    {-# LINE 69 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_MOVE_SELF = (2048)
    {-# LINE 70 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_MOVED_FROM = (64)
    {-# LINE 71 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_MOVED_TO = (128)
    {-# LINE 72 "Foundation/System/Bindings/Linux.hsc" #-}

    -- extra mask at add_watch time
    sysLinux_IN_OPEN
        , sysLinux_IN_DONT_FOLLOW
        , sysLinux_IN_MASK_ADD
        , sysLinux_IN_ONESHOT
        , sysLinux_IN_ONLYDIR :: CInotifyMask
    sysLinux_IN_OPEN = (32)
    {-# LINE 80 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_DONT_FOLLOW = (33554432)
    {-# LINE 81 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_MASK_ADD = (536870912)
    {-# LINE 82 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_ONESHOT = (2147483648)
    {-# LINE 83 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_ONLYDIR = (16777216)
    {-# LINE 84 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 86 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_EXCL_UNLINK :: CInotifyMask
    sysLinux_IN_EXCL_UNLINK = (67108864)
    {-# LINE 88 "Foundation/System/Bindings/Linux.hsc" #-}

    {-# LINE 89 "Foundation/System/Bindings/Linux.hsc" #-}

    -- only found in mask
    sysLinux_IN_IGNORED
        , sysLinux_IN_ISDIR
        , sysLinux_IN_Q_OVERFLOW
        , sysLinux_IN_UNMOUNT :: CInotifyMask
    sysLinux_IN_IGNORED = (32768)
    {-# LINE 96 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_ISDIR = (1073741824)
    {-# LINE 97 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_Q_OVERFLOW = (16384)
    {-# LINE 98 "Foundation/System/Bindings/Linux.hsc" #-}
    sysLinux_IN_UNMOUNT = (8192)
    {-# LINE 99 "Foundation/System/Bindings/Linux.hsc" #-}

    cinotifyEventSize :: CSize
    cinotifyEventSize = 16

    foreign import ccall unsafe "inotify_init1"
        sysLinuxInotifyInit :: CInotifyFlags -> IO CFd
    foreign import ccall unsafe "inotify_add_watch"
        sysLinuxInotifyAddWatch :: CFd -> Ptr CChar -> CInotifyMask -> IO CWatchDescriptor
    foreign import ccall unsafe "inotify_rm_watch"
        sysLinuxInotifyRmWatch :: CFd -> CWatchDescriptor -> IO Int