From e29bcec693268225f9e66aaa13d1e3a54f55c18f Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Tue, 15 May 2018 19:05:43 +0000
Subject: string interfaces: __ntapi_tt_aligned_block_memlock(): initial
 integration.

---
 src/string/ntapi_tt_aligned_block_memlock.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 src/string/ntapi_tt_aligned_block_memlock.c

(limited to 'src/string')

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;
+}
-- 
cgit v1.2.3