Keep hashing '\0' until color is not black
Actually uses the rest of the hash state this way.master
parent
ed9961410e
commit
398f752322
16
handle.c
16
handle.c
|
@ -25,16 +25,22 @@
|
|||
#include "chat.h"
|
||||
|
||||
// Adapted from <https://github.com/cbreeden/fxhash/blob/master/lib.rs>.
|
||||
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]);
|
||||
}
|
||||
hash &= IRC_LIGHT_GRAY;
|
||||
return (hash == IRC_BLACK) ? IRC_GRAY : hash;
|
||||
while (IRC_BLACK == (hash & IRC_LIGHT_GRAY)) {
|
||||
hash = hashChar(hash, '\0');
|
||||
}
|
||||
return (hash & IRC_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
static char *paramField(char **params) {
|
||||
|
|
Loading…
Reference in New Issue