1 /* Specialized functions to manipulate a set of files.
2 Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
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.
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.
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/>. */
17 /* written by Jim Meyering */
22 #include "hash-triple.h"
25 /* Record file, FILE, and dev/ino from *STATS, in the hash table, HT.
26 If HT is NULL, return immediately.
27 If memory allocation fails, exit immediately. */
29 record_file (Hash_table
*ht
, char const *file
, struct stat
const *stats
)
36 ent
= xmalloc (sizeof *ent
);
37 ent
->name
= xstrdup (file
);
38 ent
->st_ino
= stats
->st_ino
;
39 ent
->st_dev
= stats
->st_dev
;
42 struct F_triple
*ent_from_table
= hash_insert (ht
, ent
);
43 if (ent_from_table
== NULL
)
45 /* Insertion failed due to lack of memory. */
49 if (ent_from_table
!= ent
)
51 /* There was alread a matching entry in the table, so ENT was
52 not inserted. Free it. */
58 /* Return true if there is an entry in hash table, HT,
59 for the file described by FILE and STATS. */
61 seen_file (Hash_table
const *ht
, char const *file
,
62 struct stat
const *stats
)
64 struct F_triple new_ent
;
69 new_ent
.name
= (char *) file
;
70 new_ent
.st_ino
= stats
->st_ino
;
71 new_ent
.st_dev
= stats
->st_dev
;
73 return !!hash_lookup (ht
, &new_ent
);