From: Wilfried Göesgens Date: Wed, 24 Dec 2008 10:42:57 +0000 (+0000) Subject: * adjust backward iterating X-Git-Tag: v7.86~1679 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=f3578ecc9bc24e60e35b4bb3eaff1f22c3e62b9e * adjust backward iterating --- 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; }