ext2fsP.h revision 08ae93a2eda03817deabf08d4da9015a283ed56b
1/*
2 * ext2fsP.h --- private header file for ext2 library
3 *
4 * Copyright (C) 1997 Theodore Ts'o.
5 *
6 * %Begin-Header%
7 * This file may be redistributed under the terms of the GNU Library
8 * General Public License, version 2.
9 * %End-Header%
10 */
11
12#include "ext2fs.h"
13
14#define EXT2FS_MAX_NESTED_LINKS  8
15
16/*
17 * Badblocks list
18 */
19struct ext2_struct_u32_list {
20	int	magic;
21	int	num;
22	int	size;
23	__u32	*list;
24	int	badblocks_flags;
25};
26
27struct ext2_struct_u32_iterate {
28	int			magic;
29	ext2_u32_list		bb;
30	int			ptr;
31};
32
33
34/*
35 * Directory block iterator definition
36 */
37struct ext2_struct_dblist {
38	int			magic;
39	ext2_filsys		fs;
40	unsigned long long	size;
41	unsigned long long	count;
42	int			sorted;
43	struct ext2_db_entry2 *	list;
44};
45
46/*
47 * For directory iterators
48 */
49struct dir_context {
50	ext2_ino_t		dir;
51	int		flags;
52	char		*buf;
53	int (*func)(ext2_ino_t	dir,
54		    int	entry,
55		    struct ext2_dir_entry *dirent,
56		    int	offset,
57		    int	blocksize,
58		    char	*buf,
59		    void	*priv_data);
60	void		*priv_data;
61	errcode_t	errcode;
62};
63
64/*
65 * Inode cache structure
66 */
67struct ext2_inode_cache {
68	void *				buffer;
69	blk_t				buffer_blk;
70	int				cache_last;
71	int				cache_size;
72	int				refcount;
73	struct ext2_inode_cache_ent	*cache;
74};
75
76struct ext2_inode_cache_ent {
77	ext2_ino_t		ino;
78	struct ext2_inode	inode;
79};
80
81/* Function prototypes */
82
83extern int ext2fs_process_dir_block(ext2_filsys  	fs,
84				    blk64_t		*blocknr,
85				    e2_blkcnt_t		blockcnt,
86				    blk64_t		ref_block,
87				    int			ref_offset,
88				    void		*priv_data);
89
90/* Generic numeric progress meter */
91
92struct ext2fs_numeric_progress_struct {
93	__u64		max;
94	int		log_max;
95	int		skip_progress;
96};
97
98extern void ext2fs_numeric_progress_init(ext2_filsys fs,
99					 struct ext2fs_numeric_progress_struct * progress,
100					 const char *label, __u64 max);
101extern void ext2fs_numeric_progress_update(ext2_filsys fs,
102					   struct ext2fs_numeric_progress_struct * progress,
103					   __u64 val);
104extern void ext2fs_numeric_progress_close(ext2_filsys fs,
105					  struct ext2fs_numeric_progress_struct * progress,
106					  const char *message);
107
108/*
109 * 64-bit bitmap support
110 */
111
112#define EXT2FS_BMAP64_BITARRAY	1
113
114extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
115					   int type, __u64 start, __u64 end,
116					   __u64 real_end,
117					   const char * description,
118					   ext2fs_generic_bitmap *bmap);
119
120extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
121
122extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
123					  ext2fs_generic_bitmap *dest);
124
125extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
126					    __u64 new_end,
127					    __u64 new_real_end);
128extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
129					       errcode_t neq,
130					       __u64 end, __u64 *oend);
131extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
132				    __u64 arg);
133extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
134				      __u64 arg);
135extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
136				    __u64 arg);
137extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap,
138					       __u64 start, unsigned int num,
139					       void *in);
140extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
141					       __u64 start, unsigned int num,
142					       void *out);
143extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
144
145extern int ext2fs_mem_is_zero(const char *mem, size_t len);
146