]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/io/directories/windows/windows.factor
When deleting a file, if it fails with "Access is denied" then set the file
[factor.git] / basis / io / directories / windows / windows.factor
index b889f435e41addb3dcd22916299b7970f85f1a08..3d1bfddde597dccbd20a692f6e2fa3cdc87a9630 100644 (file)
@@ -19,8 +19,21 @@ M: windows move-file ( from to -- )
 
 ERROR: file-delete-failed path error ;
 
+: delete-file-throws ( path -- )
+    DeleteFile win32-error=0/f ;
+
+: delete-read-only-file ( path -- )
+    [ set-file-normal-attribute ] [ delete-file-throws ] bi ;
+
+: (delete-file) ( path -- )
+    dup DeleteFile 0 = [
+        GetLastError ERROR_ACCESS_DENIED =
+        [ delete-read-only-file ] [ win32-error ] if
+    ] [ drop ] if ;
+
 M: windows delete-file ( path -- )
-    [ normalize-path DeleteFile win32-error=0/f ]
+    normalize-path
+    [ (delete-file) ]
     [ \ file-delete-failed boa rethrow ] recover ;
 
 M: windows copy-file ( from to -- )