summaryrefslogtreecommitdiffhomepage
path: root/src/string/ntapi_tt_aligned_block_memlock.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2018-05-15 19:05:43 +0000
committermidipix <writeonce@midipix.org>2018-05-15 18:40:05 -0400
commite29bcec693268225f9e66aaa13d1e3a54f55c18f (patch)
tree1a1a5bfaf6b4bd9caa8919dc8dafc3214d47dad2 /src/string/ntapi_tt_aligned_block_memlock.c
parentad58de287d1c25c8bc143803b978c4bc5b0955f2 (diff)
downloadntapi-e29bcec693.tar.bz2
ntapi-e29bcec693.tar.xz
string interfaces: __ntapi_tt_aligned_block_memlock(): initial integration.
Diffstat (limited to 'src/string/ntapi_tt_aligned_block_memlock.c')
-rw-r--r--src/string/ntapi_tt_aligned_block_memlock.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/string/ntapi_tt_aligned_block_memlock.c b/src/string/ntapi_tt_aligned_block_memlock.c
new file mode 100644
index 0000000..5aa3a7e
--- /dev/null
+++ b/src/string/ntapi_tt_aligned_block_memlock.c
@@ -0,0 +1,23 @@
+/********************************************************/
+/* ntapi: Native API core library */
+/* Copyright (C) 2013--2018 Z. Gilboa */
+/* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */
+/********************************************************/
+
+#include <psxtypes/psxtypes.h>
+#include <ntapi/nt_string.h>
+#include <ntapi/nt_sync.h>
+#include <ntapi/nt_atomic.h>
+
+uintptr_t * __cdecl __ntapi_tt_aligned_block_memlock(
+ __in uintptr_t * dst,
+ __in size_t bytes)
+{
+ size_t addr = (size_t)dst & ~(size_t)(NT_SYNC_BLOCK_SIZE);
+ size_t cap = addr + bytes;
+
+ for (; addr<cap; addr+=NT_SYNC_BLOCK_SIZE)
+ at_locked_xadd((intptr_t *)addr,0);
+
+ return dst;
+}