https://git.reactos.org/?p=reactos.git;a=commitdiff;h=96676ca251e053e43742c2eda7de12f9e751ff8b

commit 96676ca251e053e43742c2eda7de12f9e751ff8b
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Fri Nov 29 09:59:48 2024 +0200
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Tue Jan 14 13:34:24 2025 +0200

    [PSEH] Use native SEH on clang-cl x64
---
 drivers/filesystems/fastfat/create.c | 19 ++++++++++---------
 sdk/lib/pseh/include/pseh/pseh2.h    |  2 +-
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/filesystems/fastfat/create.c 
b/drivers/filesystems/fastfat/create.c
index fa9b651e364..cf2cf85e4c5 100644
--- a/drivers/filesystems/fastfat/create.c
+++ b/drivers/filesystems/fastfat/create.c
@@ -2356,7 +2356,7 @@ Return Value:
         if ((CreateDisposition != FILE_OPEN) &&
             (CreateDisposition != FILE_OPEN_IF)) {
 
-            try_return( Iosb.Status = STATUS_ACCESS_DENIED );
+            try_return( Status = STATUS_ACCESS_DENIED );
         }
 
         //
@@ -2389,7 +2389,7 @@ Return Value:
             if (!FlagOn(ShareAccess, FILE_SHARE_READ) &&
                 !FatIsHandleCountZero( IrpContext, Vcb )) {
 
-                try_return( Iosb.Status = STATUS_SHARING_VIOLATION );
+                try_return( Status = STATUS_SHARING_VIOLATION );
             }
 
             //
@@ -2412,14 +2412,14 @@ Return Value:
 
                 if (Vcb->OpenFileCount != 0) {
 
-                    try_return( Iosb.Status = STATUS_SHARING_VIOLATION );
+                    try_return( Status = STATUS_SHARING_VIOLATION );
                 }
 
             } else {
 
                 if (Vcb->ReadOnlyCount != Vcb->OpenFileCount) {
 
-                    try_return( Iosb.Status = STATUS_SHARING_VIOLATION );
+                    try_return( Status = STATUS_SHARING_VIOLATION );
                 }
             }
 
@@ -2487,13 +2487,13 @@ Return Value:
 
         if (Vcb->DirectAccessOpenCount > 0) {
 
-            if (!NT_SUCCESS(Iosb.Status = IoCheckShareAccess( *DesiredAccess,
+            if (!NT_SUCCESS(Status = IoCheckShareAccess( *DesiredAccess,
                                                               ShareAccess,
                                                               FileObject,
                                                               
&Vcb->ShareAccess,
                                                               TRUE ))) {
 
-                try_return( Iosb.Status );
+                try_return( NOTHING );
             }
 
         } else {
@@ -2546,7 +2546,7 @@ Return Value:
         //  And set our status to success
         //
 
-        Iosb.Status = STATUS_SUCCESS;
+        Status = STATUS_SUCCESS;
         Iosb.Information = FILE_OPENED;
 
     try_exit: NOTHING;
@@ -2558,7 +2558,7 @@ Return Value:
         //  If this is an abnormal termination then undo our work
         //
 
-        if (_SEH2_AbnormalTermination() || !NT_SUCCESS(Iosb.Status)) {
+        if (_SEH2_AbnormalTermination() || !NT_SUCCESS(Status)) {
 
             if (UnwindCounts) {
                 Vcb->DirectAccessOpenCount -= 1;
@@ -2570,9 +2570,10 @@ Return Value:
             if (UnwindVolumeLock) { Vcb->VcbState &= ~VCB_STATE_FLAG_LOCKED; }
         }
 
-        DebugTrace(-1, Dbg, "FatOpenVolume -> Iosb.Status = %08lx\n", 
Iosb.Status);
+        DebugTrace(-1, Dbg, "FatOpenVolume -> Iosb.Status = %08lx\n", Status);
     } _SEH2_END;
 
+    Iosb.Status = Status;
     return Iosb;
 }
 
diff --git a/sdk/lib/pseh/include/pseh/pseh2.h 
b/sdk/lib/pseh/include/pseh/pseh2.h
index a6d0ab5a3a2..a3aed7aed2b 100644
--- a/sdk/lib/pseh/include/pseh/pseh2.h
+++ b/sdk/lib/pseh/include/pseh/pseh2.h
@@ -25,7 +25,7 @@
 
 #define __USE_PSEH2__
 
-#if defined(_USE_NATIVE_SEH) || (defined(_MSC_VER) && !(defined(__clang__) && 
defined(_M_AMD64)))
+#if defined(_USE_NATIVE_SEH) || defined(_MSC_VER)
 
 #define _SEH2_TRY __try
 #define _SEH2_FINALLY __finally

Reply via email to