const char *p = key.c_str();
p = _key_decode_shard(p, &oid->shard_id);
- if (!p)
+ if (!*p)
return -2;
uint64_t pool;
p = _key_decode_u64(p, &pool);
- if (!p)
+ if (!*p)
return -3;
- oid->hobj.pool = pool - 0x8000000000000000;
+ oid->hobj.pool = pool - 0x8000000000000000ull;
unsigned hash;
p = _key_decode_u32(p, &hash);
- if (!p)
+ if (!*p)
return -4;
oid->hobj.set_bitwise_key_u32(hash);
if (*p != '.')
}
p = _key_decode_u64(p, &oid->hobj.snap.val);
- if (!p)
+ if (!*p)
return -11;
p = _key_decode_u64(p, &oid->generation);
- if (!p)
+ if (*p) {
+ // if we get something other than a null terminator here,
+ // something goes wrong.
return -12;
+ }
+
return 0;
}