From f3578ecc9bc24e60e35b4bb3eaff1f22c3e62b9e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Wed, 24 Dec 2008 10:42:57 +0000 Subject: [PATCH] * adjust backward iterating --- libcitadel/lib/hash.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libcitadel/lib/hash.c b/libcitadel/lib/hash.c index b8ba8c346..616429ca8 100644 --- a/libcitadel/lib/hash.c +++ b/libcitadel/lib/hash.c @@ -575,8 +575,7 @@ HashPos *GetNewHashPos(HashList *Hash, int StepWidth) else Ret->StepWidth = 1; if (Ret->StepWidth < 0) { - Ret->Position = (Hash->nMembersUsed % (-Ret->StepWidth)) - * (-Ret->StepWidth); + Ret->Position = Hash->nMembersUsed - 1; } else { Ret->Position = 0; @@ -626,10 +625,18 @@ int GetNextHashPos(HashList *Hash, HashPos *At, long *HKLen, const char **HashKe PayloadPos = Hash->LookupTable[At->Position]->Position; *Data = Hash->Members[PayloadPos]->Data; - At->Position += At->StepWidth; + if (At->Position % abs(At->StepWidth) == 0) + At->Position += At->StepWidth; + else + At->Position += (At->Position % abs(At->StepWidth)) * + (At->StepWidth / abs(At->StepWidth)); + if (At->Position > Hash->nMembersUsed) { At->Position = Hash->nMembersUsed; return 0; + } else if (At->Position <= 0) { + At->Position = 0; + return 0; } return 1; } -- 2.30.2