HFuse 0.2.3 → 0.2.4
raw patch · 3 files changed
+17/−12 lines, 3 filesnew-uploaderPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ System.Fuse: fuseRun :: String -> [String] -> Exception e => FuseOperations fh -> (e -> IO Errno) -> IO ()
Files
- HFuse.cabal +2/−2
- README +3/−3
- System/Fuse.hsc +12/−7
HFuse.cabal view
@@ -1,11 +1,11 @@ Name: HFuse-Version: 0.2.3+Version: 0.2.4 License: BSD3 License-File: LICENSE Author: Jeremy Bobbio Maintainer: Taru Karttunen <taruti@taruti.net> Synopsis: HFuse is a binding for the Linux FUSE library.-Homepage: http://code.haskell.org/hfuse+Homepage: https://github.com/realdesktop/hfuse Category: System Stability: Experimental Cabal-Version: >= 1.2
README view
@@ -1,9 +1,9 @@ Programs using HFuse should be compiled with -threaded. HelloFS seems to work with:-* Linux 2.6.24-* The Glorious Glasgow Haskell Compilation System, version 6.8.2-* fuse-2.6+* Linux 2.6.39+* The Glorious Glasgow Haskell Compilation System, version 7.0.3+* fuse-2.8.5 BindFS (?) is known to have a lurking deadlock problem.
System/Fuse.hsc view
@@ -29,6 +29,7 @@ , FuseOperations(..) , defaultFuseOps , fuseMain -- :: FuseOperations fh -> (Exception -> IO Errno) -> IO ()+ , fuseRun -- :: String -> [String] -> FuseOperations fh -> (Exception -> IO Errno) -> IO () , defaultExceptionHandler -- :: Exception -> IO Errno -- * Operations datatypes , FileStat(..)@@ -433,11 +434,9 @@ } -- Allocates a fuse_args struct to hold the commandline arguments.-withFuseArgs :: (Ptr CFuseArgs -> IO b) -> IO b-withFuseArgs f =- do prog <- getProgName- args <- getArgs- let allArgs = (prog:args)+withFuseArgs :: String -> [String] -> (Ptr CFuseArgs -> IO b) -> IO b+withFuseArgs prog args f =+ do let allArgs = (prog:args) argc = length allArgs withMany withCString allArgs (\ cArgs -> withArray cArgs $ (\ pArgv ->@@ -832,13 +831,19 @@ -- -- * calls FUSE event loop. fuseMain :: Exception e => FuseOperations fh -> (e -> IO Errno) -> IO ()-fuseMain ops handler =+fuseMain ops handler = do -- this used to be implemented using libfuse's fuse_main. Doing this will fork() -- from C behind the GHC runtime's back, which deadlocks in GHC 6.8. -- Instead, we reimplement fuse_main in Haskell using the forkProcess and the -- lower-level fuse_new/fuse_loop_mt API.+ prog <- getProgName+ args <- getArgs+ fuseRun prog args ops handler++fuseRun :: String -> [String] -> Exception e => FuseOperations fh -> (e -> IO Errno) -> IO ()+fuseRun prog args ops handler = IO.catch- (withFuseArgs (\pArgs ->+ (withFuseArgs prog args (\pArgs -> do cmd <- fuseParseCommandLine pArgs case cmd of Nothing -> fail ""