Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/hash-triple.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | /* Hash functions for file-related triples: name, device, inode. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | This program is free software: you can redistribute it and/or modify | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | it under the terms of the GNU General Public License as published by | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | the Free Software Foundation; either version 3 of the License, or | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | (at your option) any later version. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | This program is distributed in the hope that it will be useful, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | GNU General Public License for more details. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14 | You should have received a copy of the GNU General Public License | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15 | along with this program. If not, see <https://www.gnu.org/licenses/>. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 | /* written by Jim Meyering */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19 | #include <config.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21 | #include "hash-triple.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
22 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
23 | #include <stdlib.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
24 | #include <string.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
25 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 | #include "hash-pjw.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 | #include "same.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
28 | #include "same-inode.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
29 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
30 | #define STREQ(a, b) (strcmp (a, b) == 0) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
32 | /* Hash an F_triple, and *do* consider the file name. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33 | size_t | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
34 | triple_hash (void const *x, size_t table_size) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
35 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
36 | struct F_triple const *p = x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
37 | size_t tmp = hash_pjw (p->name, table_size); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
38 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
39 | /* Ignoring the device number here should be fine. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
40 | return (tmp ^ p->st_ino) % table_size; executed 18032 times by 6 tests: return (tmp ^ p->st_ino) % table_size; Executed by:
| 18032 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
41 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
42 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
43 | /* Hash an F_triple, without considering the file name. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
44 | size_t | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
45 | triple_hash_no_name (void const *x, size_t table_size) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
46 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
47 | struct F_triple const *p = x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
48 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
49 | /* Ignoring the device number here should be fine. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
50 | return p->st_ino % table_size; executed 61 times by 1 test: return p->st_ino % table_size; Executed by:
| 61 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
51 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
52 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
53 | /* Compare two F_triple structs. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
54 | bool | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
55 | triple_compare (void const *x, void const *y) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
56 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
57 | struct F_triple const *a = x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
58 | struct F_triple const *b = y; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
59 | return (SAME_INODE (*a, *b) && same_name (a->name, b->name)) ? true : false; executed 5078 times by 3 tests: return (((*a).st_ino == (*b).st_ino && (*a).st_dev == (*b).st_dev) && same_name (a->name, b->name)) ? 1 : 0 ; Executed by:
| 5078 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
60 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
61 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
62 | bool | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 | triple_compare_ino_str (void const *x, void const *y) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
64 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
65 | struct F_triple const *a = x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
66 | struct F_triple const *b = y; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
67 | return (SAME_INODE (*a, *b) && STREQ (a->name, b->name)) ? true : false; executed 34 times by 1 test: return (((*a).st_ino == (*b).st_ino && (*a).st_dev == (*b).st_dev) && ( __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( a->name ) && __builtin_constant_p ( b->name ) && (__s1_len = __builtin_strlen ( a->name ), __s2_len = __builtin_str...igned char *) (const char *) ( b->name ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( b->name ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( a->name , b->name )))); }) == 0)) ? 1 : 0 ; Executed by:
never executed: __result = (((const unsigned char *) (const char *) ( a->name ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( b->name ))[3] - __s2[3]); never executed: end of block never executed: end of block
| 0-34 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
68 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
69 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
70 | /* Free an F_triple. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
71 | void | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
72 | triple_free (void *x) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
73 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
74 | struct F_triple *a = x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
75 | free (a->name); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
76 | free (a); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
77 | } executed 169 times by 4 tests: end of block Executed by:
| 169 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Source code | Switch to Preprocessed file |