{- Windows lock files
-
- - Copyright 2014,2021 Joey Hess <id@joeyh.name>
+ - Copyright 2014,2022 Joey Hess <id@joeyh.name>
-
- License: BSD-2-clause
-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings, CPP #-}
module Utility.LockFile.Windows (
lockShared,
openLock :: ShareMode -> LockFile -> IO (Maybe LockHandle)
openLock sharemode f = do
f' <- convertToNativeNamespace f
+#if MIN_VERSION_win32(2,13,3)
+ r <- tryNonAsync $ createFile_NoRetry f' gENERIC_READ sharemode
+ security_attributes oPEN_ALWAYS fILE_ATTRIBUTE_NORMAL
+ (maybePtr Nothing)
+ return $ case r of
+ Left _ -> Nothing
+ Right h -> Just h
+#else
h <- withTString (fromRawFilePath f') $ \c_f ->
c_CreateFile c_f gENERIC_READ sharemode security_attributes
oPEN_ALWAYS fILE_ATTRIBUTE_NORMAL (maybePtr Nothing)
return $ if h == iNVALID_HANDLE_VALUE
then Nothing
else Just h
+#endif
where
security_attributes = maybePtr Nothing
--- /dev/null
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2022-08-02T14:43:47Z"
+ content="""
+The necessary change will be in win32 2.13.3.1, which should be released
+in due course. And I've made a (so far untested) change to git-annex to
+support that version.
+"""]]
if (os(windows))
Build-Depends:
- Win32 (>= 2.6.1.0 && < 2.12.0.0),
+ Win32 ((>= 2.6.1.0 && < 2.12.0.0) || >= 2.13.3.1),
setenv,
process (>= 1.6.2.0),
silently (>= 1.2.5.1)