hash-func: add generic hash_ops implementation for hashing paths
This is similar to string_hash_ops but operates one file system paths specifically. It will ensure that "/foo//bar" and "///foo/bar" are considered to be the same path for hashmap purposes. This makes use of the existing path_compare() API, and adds a matching hashing function for it. Note that relative and absolute paths will hash to different values, however whether the path is suffixed with a slash or not is not detected. This matches the existing path_compare() behaviour, and follows the logic that on Linux there can't be two different objects at path /foo/bar and /foo/bar/ either.
This commit is contained in:
@@ -36,9 +36,12 @@ void string_hash_func(const void *p, struct siphash *state);
|
||||
int string_compare_func(const void *a, const void *b) _pure_;
|
||||
extern const struct hash_ops string_hash_ops;
|
||||
|
||||
/* This will compare the passed pointers directly, and will not
|
||||
* dereference them. This is hence not useful for strings or
|
||||
* suchlike. */
|
||||
void path_hash_func(const void *p, struct siphash *state);
|
||||
int path_compare_func(const void *a, const void *b) _pure_;
|
||||
extern const struct hash_ops path_hash_ops;
|
||||
|
||||
/* This will compare the passed pointers directly, and will not dereference them. This is hence not useful for strings
|
||||
* or suchlike. */
|
||||
void trivial_hash_func(const void *p, struct siphash *state);
|
||||
int trivial_compare_func(const void *a, const void *b) _const_;
|
||||
extern const struct hash_ops trivial_hash_ops;
|
||||
|
||||
Reference in New Issue
Block a user