mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-01 04:13:35 +00:00
Implement "portable" SList code for 64 bit
svn path=/branches/ros-amd64-bringup/; revision=44296
This commit is contained in:
+25
-5
@@ -20,7 +20,10 @@ NTAPI
|
||||
RtlInitializeSListHead(IN PSLIST_HEADER ListHead)
|
||||
{
|
||||
#ifdef _WIN64
|
||||
UNIMPLEMENTED;
|
||||
ListHead->Alignment = 0;
|
||||
ListHead->Region = 0;
|
||||
ListHead->Header8.Init = 1;
|
||||
// ListHead->Header8.HeaderType = 1; // FIXME: depending on cmpxchg16b support?
|
||||
#else
|
||||
ListHead->Alignment = 0;
|
||||
#endif
|
||||
@@ -31,8 +34,25 @@ NTAPI
|
||||
RtlFirstEntrySList(IN const SLIST_HEADER *ListHead)
|
||||
{
|
||||
#ifdef _WIN64
|
||||
UNIMPLEMENTED;
|
||||
return NULL;
|
||||
if (ListHead->Header8.HeaderType)
|
||||
{
|
||||
return (PVOID)(ListHead->Region & ~0xF);
|
||||
}
|
||||
else
|
||||
{
|
||||
union {
|
||||
PVOID P;
|
||||
struct {
|
||||
ULONG64 Reserved:4;
|
||||
ULONG64 NextEntry:39;
|
||||
ULONG64 Reserved2:21;
|
||||
} Bits;
|
||||
} Pointer;
|
||||
|
||||
Pointer.P = (PVOID)ListHead;
|
||||
Pointer.Bits.NextEntry = ListHead->Header8.NextEntry;
|
||||
return Pointer.P;
|
||||
}
|
||||
#else
|
||||
return ListHead->Next.Next;
|
||||
#endif
|
||||
@@ -43,8 +63,8 @@ NTAPI
|
||||
RtlQueryDepthSList(IN PSLIST_HEADER ListHead)
|
||||
{
|
||||
#ifdef _WIN64
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
return ListHead->Header8.HeaderType ?
|
||||
ListHead->Header16.Sequence : ListHead->Header8.Sequence;
|
||||
#else
|
||||
return ListHead->Depth;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user