From 398f752322f5199c6f25bde57e2befd1b570862b Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Tue, 14 Aug 2018 14:04:20 -0400 Subject: Keep hashing '\0' until color is not black Actually uses the rest of the hash state this way. --- handle.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/handle.c b/handle.c index 16a416c..c93522e 100644 --- a/handle.c +++ b/handle.c @@ -25,16 +25,22 @@ #include "chat.h" // Adapted from . +static uint32_t hashChar(uint32_t hash, char ch) { + hash = (hash << 5) | (hash >> 27); + hash ^= ch; + hash *= 0x27220A95; + return hash; +} static int color(const char *str) { if (!str) return IRC_GRAY; uint32_t hash = 0; for (; str[0]; ++str) { - hash = (hash << 5) | (hash >> 27); - hash ^= str[0]; - hash *= 0x27220A95; + hash = hashChar(hash, str[0]); + } + while (IRC_BLACK == (hash & IRC_LIGHT_GRAY)) { + hash = hashChar(hash, '\0'); } - hash &= IRC_LIGHT_GRAY; - return (hash == IRC_BLACK) ? IRC_GRAY : hash; + return (hash & IRC_LIGHT_GRAY); } static char *paramField(char **params) { -- cgit 1.4.1-2-gfad0