diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-02-08 18:31:15 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-02-12 11:07:55 +0100 |
commit | 46e16b347f83d809ed3d34f26286f580dfd086ce (patch) | |
tree | 80a195b60a719a465639f8fddb5b68518588416f /src/basic/hash-funcs.h | |
parent | 9bac7d423f1d39737e2b7bc35c484ed0d79de73d (diff) | |
download | systemd-46e16b347f83d809ed3d34f26286f580dfd086ce.tar.gz |
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.
Diffstat (limited to 'src/basic/hash-funcs.h')
-rw-r--r-- | src/basic/hash-funcs.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/basic/hash-funcs.h b/src/basic/hash-funcs.h index c31ef0cc39..945b4c251c 100644 --- a/src/basic/hash-funcs.h +++ b/src/basic/hash-funcs.h @@ -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; |