diff --git a/reactos/include/ddk/rtl.h b/reactos/include/ddk/rtl.h index e8301c6cda7..648a0540aeb 100644 --- a/reactos/include/ddk/rtl.h +++ b/reactos/include/ddk/rtl.h @@ -1,4 +1,4 @@ -/* $Id: rtl.h,v 1.34 2000/05/13 01:44:53 ekohl Exp $ +/* $Id: rtl.h,v 1.35 2000/06/18 15:20:10 ekohl Exp $ * */ @@ -169,7 +169,6 @@ extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG; * RootDirectory = Where the object should be placed or NULL * SecurityDescriptor = Ignored */ - #define InitializeObjectAttributes(p,n,a,r,s) \ { \ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ @@ -180,53 +179,248 @@ extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG; (p)->SecurityQualityOfService = NULL; \ } -VOID -InitializeListHead ( - PLIST_ENTRY ListHead - ); -VOID -InsertHeadList ( - PLIST_ENTRY ListHead, - PLIST_ENTRY Entry - ); +/* + * VOID + * InitializeListHead ( + * PLIST_ENTRY ListHead + * ); + * + * FUNCTION: Initializes a double linked list + * ARGUMENTS: + * ListHead = Caller supplied storage for the head of the list + */ +#define InitializeListHead(ListHead) \ +{ \ + (ListHead)->Flink = (ListHead); \ + (ListHead)->Blink = (ListHead); \ +} -VOID -InsertTailList ( - PLIST_ENTRY ListHead, - PLIST_ENTRY Entry - ); -BOOLEAN -IsListEmpty ( - PLIST_ENTRY ListHead - ); +/* + * VOID + * InsertHeadList ( + * PLIST_ENTRY ListHead, + * PLIST_ENTRY Entry + * ); + * + * FUNCTION: Inserts an entry in a double linked list + * ARGUMENTS: + * ListHead = Head of the list + * Entry = Entry to insert + */ +#define InsertHeadList(ListHead, ListEntry) \ +{ \ + PLIST_ENTRY OldFlink; \ + OldFlink = (ListHead)->Flink; \ + (ListEntry)->Flink = OldFlink; \ + (ListEntry)->Blink = (ListHead); \ + OldFlink->Blink = (ListEntry); \ + (ListHead)->Flink = (ListEntry); \ + assert((ListEntry) != NULL); \ + assert((ListEntry)->Blink!=NULL); \ + assert((ListEntry)->Blink->Flink == (ListEntry)); \ + assert((ListEntry)->Flink != NULL); \ + assert((ListEntry)->Flink->Blink == (ListEntry)); \ +} + + +/* + * VOID + * InsertTailList ( + * PLIST_ENTRY ListHead, + * PLIST_ENTRY Entry + * ); + * + * FUNCTION: Inserts an entry in a double linked list + * ARGUMENTS: + * ListHead = Head of the list + * Entry = Entry to insert + */ +#define InsertTailList(ListHead, ListEntry) \ +{ \ + PLIST_ENTRY OldBlink; \ + OldBlink = (ListHead)->Blink; \ + (ListEntry)->Flink = (ListHead); \ + (ListEntry)->Blink = OldBlink; \ + OldBlink->Flink = (ListEntry); \ + (ListHead)->Blink = (ListEntry); \ + assert((ListEntry) != NULL); \ + assert((ListEntry)->Blink!=NULL); \ + assert((ListEntry)->Blink->Flink == (ListEntry)); \ + assert((ListEntry)->Flink != NULL); \ + assert((ListEntry)->Flink->Blink == (ListEntry)); \ +} + +/* + * BOOLEAN + * IsListEmpty ( + * PLIST_ENTRY ListHead + * ); + * + * FUNCTION: + * Checks if a double linked list is empty + * + * ARGUMENTS: + * ListHead = Head of the list +*/ +#define IsListEmpty(ListHead) \ + ((ListHead)->Flink == (ListHead)) + PSINGLE_LIST_ENTRY PopEntryList ( PSINGLE_LIST_ENTRY ListHead ); +/* +#define PopEntryList(ListHead) \ + (ListHead)->Next; \ + { \ + PSINGLE_LIST_ENTRY FirstEntry; \ + FirstEntry = (ListHead)->Next; \ + if (FirstEntry != NULL) \ + { \ + (ListHead)->Next = FirstEntry->Next; \ + } \ + } +*/ VOID PushEntryList ( PSINGLE_LIST_ENTRY ListHead, PSINGLE_LIST_ENTRY Entry ); +/* +#define PushEntryList(ListHead,Entry) \ + (Entry)->Next = (ListHead)->Next; \ + (ListHead)->Next = (Entry) +*/ -VOID -RemoveEntryList ( - PLIST_ENTRY Entry - ); +/* + *VOID + *RemoveEntryList ( + * PLIST_ENTRY Entry + * ); + * + * FUNCTION: + * Removes an entry from a double linked list + * + * ARGUMENTS: + * ListEntry = Entry to remove + */ +#define RemoveEntryList(ListEntry) \ +{ \ + PLIST_ENTRY OldFlink; \ + PLIST_ENTRY OldBlink; \ + assert((ListEntry) != NULL); \ + assert((ListEntry)->Blink!=NULL); \ + assert((ListEntry)->Blink->Flink == (ListEntry)); \ + assert((ListEntry)->Flink != NULL); \ + assert((ListEntry)->Flink->Blink == (ListEntry)); \ + OldFlink = (ListEntry)->Flink; \ + OldBlink = (ListEntry)->Blink; \ + OldFlink->Blink = OldBlink; \ + OldBlink->Flink = OldFlink; \ +} + + +/* + * PLIST_ENTRY + * RemoveHeadList ( + * PLIST_ENTRY ListHead + * ); + * + * FUNCTION: + * Removes the head entry from a double linked list + * + * ARGUMENTS: + * ListHead = Head of the list + * + * RETURNS: + * The removed entry + */ +/* +#define RemoveHeadList(ListHead) \ + (ListHead)->Flink; \ + {RemoveEntryList((ListHead)->Flink)} +*/ +/* PLIST_ENTRY RemoveHeadList ( PLIST_ENTRY ListHead ); +*/ +static +inline +PLIST_ENTRY +RemoveHeadList ( + PLIST_ENTRY ListHead + ) +{ + PLIST_ENTRY Old; + PLIST_ENTRY OldFlink; + PLIST_ENTRY OldBlink; + + Old = ListHead->Flink; + + OldFlink = ListHead->Flink->Flink; + OldBlink = ListHead->Flink->Blink; + OldFlink->Blink = OldBlink; + OldBlink->Flink = OldFlink; + + return(Old); +} + + +/* + * PLIST_ENTRY + * RemoveTailList ( + * PLIST_ENTRY ListHead + * ); + * + * FUNCTION: + * Removes the tail entry from a double linked list + * + * ARGUMENTS: + * ListHead = Head of the list + * RETURNS: + * The removed entry + */ +/* +#define RemoveTailList(ListHead) \ + (ListHead)->Blink; \ + {RemoveEntryList((ListHead)->Blink)} +*/ +/* PLIST_ENTRY RemoveTailList ( PLIST_ENTRY ListHead ); +*/ + +static +inline +PLIST_ENTRY +RemoveTailList ( + PLIST_ENTRY ListHead + ) +{ + PLIST_ENTRY Old; + PLIST_ENTRY OldFlink; + PLIST_ENTRY OldBlink; + + Old = ListHead->Blink; + + OldFlink = ListHead->Blink->Flink; + OldBlink = ListHead->Blink->Blink; + OldFlink->Blink = OldBlink; + OldBlink->Flink = OldFlink; + + return(Old); +} + PVOID STDCALL diff --git a/reactos/ntoskrnl/ntoskrnl.def b/reactos/ntoskrnl/ntoskrnl.def index 6e0cb74b7e9..eaf60513362 100644 --- a/reactos/ntoskrnl/ntoskrnl.def +++ b/reactos/ntoskrnl/ntoskrnl.def @@ -1,4 +1,4 @@ -; $Id: ntoskrnl.def,v 1.75 2000/06/12 14:53:09 ekohl Exp $ +; $Id: ntoskrnl.def,v 1.76 2000/06/18 15:21:18 ekohl Exp $ ; ; reactos/ntoskrnl/ntoskrnl.def ; @@ -1014,12 +1014,7 @@ wctomb ; ; ReactOS Extensions (these should be macros!) ; -;IoInitializeDpcRequest -;IoRequestDpc MmGetSystemAddressForMdl -InitializeListHead -InsertTailList -RemoveEntryList ; ; ; exports from hal.dll diff --git a/reactos/ntoskrnl/ntoskrnl.edf b/reactos/ntoskrnl/ntoskrnl.edf index c3aa9e0d5ac..7915b0904f3 100644 --- a/reactos/ntoskrnl/ntoskrnl.edf +++ b/reactos/ntoskrnl/ntoskrnl.edf @@ -1,4 +1,4 @@ -; $Id: ntoskrnl.edf,v 1.62 2000/06/12 14:53:09 ekohl Exp $ +; $Id: ntoskrnl.edf,v 1.63 2000/06/18 15:21:18 ekohl Exp $ ; ; reactos/ntoskrnl/ntoskrnl.def ; @@ -947,12 +947,7 @@ wctomb ; ; ReactOS Extensions ; -;IoInitializeDpcRequest -;IoRequestDpc MmGetSystemAddressForMdl -InitializeListHead -InsertTailList -RemoveEntryList ; ; ; exports from hal.dll diff --git a/reactos/ntoskrnl/rtl/list.c b/reactos/ntoskrnl/rtl/list.c index f35b0d6b8c7..4f3a13fb236 100644 --- a/reactos/ntoskrnl/rtl/list.c +++ b/reactos/ntoskrnl/rtl/list.c @@ -1,4 +1,4 @@ -/* $Id: list.c,v 1.6 2000/06/07 13:05:09 ekohl Exp $ +/* $Id: list.c,v 1.7 2000/06/18 15:21:53 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -16,6 +16,7 @@ /* FUNCTIONS *************************************************************/ +#if 0 static BOOLEAN CheckEntry(PLIST_ENTRY ListEntry) { assert(ListEntry!=NULL); @@ -26,36 +27,6 @@ static BOOLEAN CheckEntry(PLIST_ENTRY ListEntry) return(TRUE); } -BOOLEAN IsListEmpty(PLIST_ENTRY ListHead) -/* - * FUNCTION: Determines if a list is empty - * ARGUMENTS: - * ListHead = Head of the list - * RETURNS: True if there are no entries in the list - */ -{ - return(ListHead->Flink==ListHead); -} - -VOID RemoveEntryList(PLIST_ENTRY ListEntry) -{ - PLIST_ENTRY OldFlink; - PLIST_ENTRY OldBlink; - - DPRINT("RemoveEntryList(ListEntry %x)\n", ListEntry); - - assert(CheckEntry(ListEntry)); - - OldFlink=ListEntry->Flink; - OldBlink=ListEntry->Blink; - - OldFlink->Blink=OldBlink; - OldBlink->Flink=OldFlink; - - - DPRINT("RemoveEntryList()\n"); -} - PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead) /* * FUNCTION: Remove the tail entry from a double linked list @@ -70,60 +41,22 @@ PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead) } PLIST_ENTRY RemoveHeadList(PLIST_ENTRY ListHead) -{ +{ PLIST_ENTRY Old; - + DPRINT("RemoveHeadList(ListHead %x)\n",ListHead); - + assert(CheckEntry(ListHead)); - + Old = ListHead->Flink; RemoveEntryList(ListHead->Flink); - + DPRINT("RemoveHeadList()\n"); - + return(Old); } +#endif -VOID InitializeListHead(PLIST_ENTRY ListHead) -/* - * FUNCTION: Initializes a double linked list - * ARGUMENTS: - * ListHead = Caller supplied storage for the head of the list - */ -{ - ListHead->Flink = ListHead->Blink = ListHead; -} - -VOID InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry) -/* - * FUNCTION: Inserts an entry in a double linked list - * ARGUMENTS: - * ListHead = Head of the list - * Entry = Entry to insert - */ -{ - PLIST_ENTRY Blink; - - Blink = ListHead->Blink; - ListEntry->Flink=ListHead; - ListEntry->Blink=Blink; - Blink->Flink=ListEntry; - ListHead->Blink=ListEntry; - assert(CheckEntry(ListEntry)); -} - -VOID InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry) -{ - PLIST_ENTRY OldFlink; - - OldFlink = ListHead->Flink; - ListEntry->Flink = OldFlink; - ListEntry->Blink = ListHead; - OldFlink->Blink = ListEntry; - ListHead->Flink = ListEntry; - assert( CheckEntry( ListEntry ) ); -} PLIST_ENTRY STDCALL @@ -142,12 +75,12 @@ ExInterlockedInsertTailList ( Old = NULL; } else - { + { Old = ListHead->Blink; } InsertTailList(ListHead,ListEntry); KeReleaseSpinLock(Lock,oldlvl); - + return(Old); } @@ -166,7 +99,7 @@ ExInterlockedInsertHeadList ( * Lock = Caller supplied spinlock used to synchronise access * RETURNS: The previous head of the list */ -{ +{ PLIST_ENTRY Old; KIRQL oldlvl; @@ -181,7 +114,7 @@ ExInterlockedInsertHeadList ( } InsertHeadList(ListHead,ListEntry); KeReleaseSpinLock(Lock,oldlvl); - + return(Old); } @@ -202,7 +135,7 @@ ExInterlockedRemoveHeadList ( { PLIST_ENTRY ret; KIRQL oldlvl; - + KeAcquireSpinLock(Lock,&oldlvl); if (IsListEmpty(Head)) { @@ -216,8 +149,11 @@ ExInterlockedRemoveHeadList ( return(ret); } -PLIST_ENTRY ExInterlockedRemoveTailList(PLIST_ENTRY Head, - PKSPIN_LOCK Lock) +PLIST_ENTRY +ExInterlockedRemoveTailList ( + PLIST_ENTRY Head, + PKSPIN_LOCK Lock + ) /* * FUNCTION: Removes the tail of a double linked list * ARGUMENTS: @@ -228,7 +164,7 @@ PLIST_ENTRY ExInterlockedRemoveTailList(PLIST_ENTRY Head, { PLIST_ENTRY ret; KIRQL oldlvl; - + KeAcquireSpinLock(Lock,&oldlvl); if (IsListEmpty(Head)) {