Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2018-03-01 18:51:12 +0300
committerCorinna Vinschen <corinna@vinschen.de>2018-03-01 18:51:12 +0300
commit65267a9a340f2a36884eea3034128781323520d3 (patch)
treec014c51df47df57d05d44a3e28b138fe411992a3 /winsup
parent3e16fd698645f8d197ea2d9e01bd00e6afe8f2fa (diff)
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.h35
-rw-r--r--winsup/cygwin/syscalls.cc36
2 files changed, 35 insertions, 36 deletions
diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h
index 58d63425e..0112349d3 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 9bae6dc0b..6d1085539 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"