From 59e269cfec51b6a7933d6e847a38c84c04056675 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 14 Apr 2014 01:43:01 +0300 Subject: qstr, objstr: Make sure that valid hash != 0, treat 0 as "not computed". This feature was proposed with initial hashing RFC, and is prerequisite for seamless static str object definition. --- py/qstr.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'py/qstr.c') diff --git a/py/qstr.c b/py/qstr.c index e4b5c111b..990ff3772 100644 --- a/py/qstr.c +++ b/py/qstr.c @@ -35,7 +35,12 @@ machine_uint_t qstr_compute_hash(const byte *data, uint len) { for (const byte *top = data + len; data < top; data++) { hash = ((hash << 5) + hash) ^ (*data); // hash * 33 ^ data } - return hash & 0xffff; + hash &= 0xffff; + // Make sure that valid hash is never zero, zero means "hash not computed" + if (hash == 0) { + hash++; + } + return hash; } typedef struct _qstr_pool_t { -- cgit v1.2.3