a9322d0606adc854440059844608a678f0ae732a
[wimlib] / include / wimlib / inode_table.h
1 #ifndef _WIMLIB_INODE_TABLE_H
2 #define _WIMLIB_INODE_TABLE_H
3
4 #include "wimlib/list.h"
5 #include "wimlib/types.h"
6
7 struct wim_dentry;
8
9 /* Hash table to find inodes for hard link detection, given an inode number (in
10  * the case of reading a WIM image), or both an inode number and a device number
11  * (in the case of adding files to a WIM image).  Also contains an extra list to
12  * hold inodes for which no additional hard link detection is desired.  In both
13  * cases the inodes are linked by i_hlist_node.  */
14 struct wim_inode_table {
15         struct hlist_head *array;
16         size_t num_entries;
17         size_t capacity;
18         struct hlist_head extra_inodes;
19 };
20
21
22 extern int
23 init_inode_table(struct wim_inode_table *table, size_t capacity);
24
25 extern int
26 inode_table_new_dentry(struct wim_inode_table *table, const tchar *name,
27                        u64 ino, u64 devno, bool noshare,
28                        struct wim_dentry **dentry_ret);
29
30 extern void
31 inode_table_prepare_inode_list(struct wim_inode_table *table,
32                                struct hlist_head *head);
33
34 extern void
35 destroy_inode_table(struct wim_inode_table *table);
36
37 #endif /* _WIMLIB_INODE_TABLE_H  */