- Implement !DeletePinned case in RtlEmptyAtomTable.
- Fix error checking in RtlAddAtomToAtomTable / RtlpCheckIntegerAtom.
Modified: trunk/reactos/lib/rtl/atom.c
_____
Modified: trunk/reactos/lib/rtl/atom.c
--- trunk/reactos/lib/rtl/atom.c 2005-08-03 14:03:31 UTC (rev
16997)
+++ trunk/reactos/lib/rtl/atom.c 2005-08-03 14:26:56 UTC (rev
16998)
@@ -98,9 +98,6 @@
{
LoValue = (USHORT)((ULONG)AtomName & 0xFFFF);
- if (LoValue >= 0xC000)
- return FALSE;
-
if (LoValue == 0)
LoValue = 0xC000;
@@ -244,7 +241,7 @@
BOOLEAN DeletePinned)
{
PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket;
- PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry;
+ PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry, *PtrEntry;
DPRINT("RtlEmptyAtomTable (AtomTable %p DeletePinned %x)\n",
AtomTable, DeletePinned);
@@ -261,17 +258,26 @@
CurrentBucket++)
{
NextEntry = *CurrentBucket;
- *CurrentBucket = NULL;
+ PtrEntry = CurrentBucket;
while (NextEntry != NULL)
{
CurrentEntry = NextEntry;
NextEntry = NextEntry->HashLink;
- RtlpFreeAtomHandle(AtomTable,
- CurrentEntry);
+ if (DeletePinned || !(CurrentEntry->Flags &
RTL_ATOM_IS_PINNED))
+ {
+ *PtrEntry = NextEntry;
- RtlpFreeAtomTableEntry(CurrentEntry);
+ RtlpFreeAtomHandle(AtomTable,
+ CurrentEntry);
+
+ RtlpFreeAtomTableEntry(CurrentEntry);
+ }
+ else
+ {
+ PtrEntry = &CurrentEntry->HashLink;
+ }
}
}
@@ -385,7 +391,7 @@
else
{
/* The caller supplied an empty atom name! */
- Status = STATUS_INVALID_PARAMETER;
+ Status = STATUS_OBJECT_NAME_INVALID;
}
}
Show replies by date