diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2018-03-01 16:51:12 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2018-03-01 16:51:12 +0100 |
commit | 65267a9a340f2a36884eea3034128781323520d3 (patch) | |
tree | c014c51df47df57d05d44a3e28b138fe411992a3 /winsup | |
parent | 3e16fd698645f8d197ea2d9e01bd00e6afe8f2fa (diff) | |
download | newlib-65267a9a340f2a36884eea3034128781323520d3.zip newlib-65267a9a340f2a36884eea3034128781323520d3.tar.gz newlib-65267a9a340f2a36884eea3034128781323520d3.tar.bz2 |
Cygwin: move transaction helpers into ntdll.h
We'll need them elsewhere in future.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ntdll.h | 35 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 36 |
2 files changed, 35 insertions, 36 deletions
diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h index 58d6342..0112349 100644 --- a/winsup/cygwin/ntdll.h +++ b/winsup/cygwin/ntdll.h @@ -14,6 +14,10 @@ /* custom status code: */ #define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269) +/* Simplify checking for a transactional error code. */ +#define NT_TRANSACTIONAL_ERROR(s) \ + (((ULONG)(s) >= (ULONG)STATUS_TRANSACTIONAL_CONFLICT) \ + && ((ULONG)(s) <= (ULONG)STATUS_TRANSACTION_NOT_ENLISTED)) #define NtCurrentProcess() ((HANDLE) (LONG_PTR) -1) #define NtCurrentThread() ((HANDLE) (LONG_PTR) -2) @@ -1601,5 +1605,36 @@ extern "C" && ebi.SignalState != 0; } + + static inline void + start_transaction (HANDLE &old_trans, HANDLE &trans) + { + NTSTATUS status = NtCreateTransaction (&trans, + SYNCHRONIZE | TRANSACTION_ALL_ACCESS, + NULL, NULL, NULL, 0, 0, 0, NULL, NULL); + if (NT_SUCCESS (status)) + { + old_trans = RtlGetCurrentTransaction (); + RtlSetCurrentTransaction (trans); + } + else + { + debug_printf ("NtCreateTransaction failed, %y", status); + old_trans = trans = NULL; + } + } + + static inline NTSTATUS + stop_transaction (NTSTATUS status, HANDLE old_trans, HANDLE &trans) + { + RtlSetCurrentTransaction (old_trans); + if (NT_SUCCESS (status)) + status = NtCommitTransaction (trans, TRUE); + else + status = NtRollbackTransaction (trans, TRUE); + NtClose (trans); + trans = NULL; + return status; + } } #endif diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 9bae6dc..6d10855 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -182,42 +182,6 @@ dup3 (int oldfd, int newfd, int flags) return res; } -/* Define macro to simplify checking for a transactional error code. */ -#define NT_TRANSACTIONAL_ERROR(s) \ - (((ULONG)(s) >= (ULONG)STATUS_TRANSACTIONAL_CONFLICT) \ - && ((ULONG)(s) <= (ULONG)STATUS_TRANSACTION_NOT_ENLISTED)) - -static inline void -start_transaction (HANDLE &old_trans, HANDLE &trans) -{ - NTSTATUS status = NtCreateTransaction (&trans, - SYNCHRONIZE | TRANSACTION_ALL_ACCESS, - NULL, NULL, NULL, 0, 0, 0, NULL, NULL); - if (NT_SUCCESS (status)) - { - old_trans = RtlGetCurrentTransaction (); - RtlSetCurrentTransaction (trans); - } - else - { - debug_printf ("NtCreateTransaction failed, %y", status); - old_trans = trans = NULL; - } -} - -static inline NTSTATUS -stop_transaction (NTSTATUS status, HANDLE old_trans, HANDLE &trans) -{ - RtlSetCurrentTransaction (old_trans); - if (NT_SUCCESS (status)) - status = NtCommitTransaction (trans, TRUE); - else - status = NtRollbackTransaction (trans, TRUE); - NtClose (trans); - trans = NULL; - return status; -} - static const char desktop_ini[] = "[.ShellClassInfo]\r\n" "CLSID={645FF040-5081-101B-9F08-00AA002F954E}\r\n" |