Code:
#include <stddef.h>
#include <stdint.h>

uint32_t hash_algorithm_fvn (void *data, size_t size)
{
register char *a;
register uint32_t hash;

a = (char *) data;

for (hash = 0; a <= data + size; ++a)
        {
        /* hash *= 16777619; */
        hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
        hash ^= *a;
        }

return hash;
}