Use createFile_NoRetry from win32 2.13.3.1
authorJoey Hess <joeyh@joeyh.name>
Tue, 2 Aug 2022 14:45:00 +0000 (10:45 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 2 Aug 2022 14:45:39 +0000 (10:45 -0400)
Sponsored-by: Tobias Ammann on Patreon
Utility/LockFile/Windows.hs
doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities.mdwn
doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_4_28e5593e0a58fb7d7a2a297fa63e8208._comment [new file with mode: 0644]
git-annex.cabal

index 08f5e80930bdd881d7a7f9ec9a500d7da301ed37..9ec34c9a796d460cb71e2ccc314368168503bcfd 100644 (file)
@@ -1,11 +1,11 @@
 {- 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,
@@ -61,12 +61,21 @@ lockExclusive = openLock fILE_SHARE_NONE
 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
 
index 73b2b454b32cf9dd60ac7686eda8363709e6250d..9442fa50ace3d1d1412e7ed34db7d70aed4b4421 100644 (file)
@@ -53,3 +53,5 @@ using Windows LockFileEx, for instance the one by my compatriot: <https://hackag
 
 [[!meta title="windows: prepare for System.Win32.File not exporting c_ entities"]]
 [[!meta author=jkniiv]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_4_28e5593e0a58fb7d7a2a297fa63e8208._comment b/doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_4_28e5593e0a58fb7d7a2a297fa63e8208._comment
new file mode 100644 (file)
index 0000000..5365531
--- /dev/null
@@ -0,0 +1,9 @@
+[[!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.
+"""]]
index d27c0c4b624e9279a8cdb2fa05fefb301f0c8e73..261de5f638d04adc0b0e8f18bb9fa956541aac48 100644 (file)
@@ -402,7 +402,7 @@ Executable git-annex
 
   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)