blob: 74b9de80cfbbb589f2676ac8fc74f9df6ee04b8e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include <config.h>
#include "hash-triple.h"
#include <stdlib.h>
#include "hash-pjw.h"
#include "same.h"
#include "same-inode.h"
/* Hash an F_triple, and *do* consider the file name. */
size_t
triple_hash (void const *x, size_t table_size)
{
struct F_triple const *p = x;
size_t tmp = hash_pjw (p->name, table_size);
/* Ignoring the device number here should be fine. */
return (tmp ^ p->st_ino) % table_size;
}
/* Hash an F_triple, without considering the file name. */
size_t
triple_hash_no_name (void const *x, size_t table_size)
{
struct F_triple const *p = x;
/* Ignoring the device number here should be fine. */
return p->st_ino % table_size;
}
/* Compare two F_triple structs. */
bool
triple_compare (void const *x, void const *y)
{
struct F_triple const *a = x;
struct F_triple const *b = y;
return (SAME_INODE (*a, *b) && same_name (a->name, b->name)) ? true : false;
}
/* Free an F_triple. */
void
triple_free (void *x)
{
struct F_triple *a = x;
free (a->name);
free (a);
}
|