]> git.ipfire.org Git - thirdparty/e2fsprogs.git/blame - lib/ext2fs/ext2fsP.h
Merge remote-tracking branch 'origin/maint' into next
[thirdparty/e2fsprogs.git] / lib / ext2fs / ext2fsP.h
CommitLineData
19c78dc0
TT
1/*
2 * ext2fsP.h --- private header file for ext2 library
efc6f628 3 *
19c78dc0
TT
4 * Copyright (C) 1997 Theodore Ts'o.
5 *
6 * %Begin-Header%
543547a5
TT
7 * This file may be redistributed under the terms of the GNU Library
8 * General Public License, version 2.
19c78dc0
TT
9 * %End-Header%
10 */
11
12#include "ext2fs.h"
13
08ae93a2
NY
14#define EXT2FS_MAX_NESTED_LINKS 8
15
19c78dc0
TT
16/*
17 * Badblocks list
18 */
b7a00563 19struct ext2_struct_u32_list {
19c78dc0
TT
20 int magic;
21 int num;
22 int size;
b7a00563 23 __u32 *list;
19c78dc0
TT
24 int badblocks_flags;
25};
26
b7a00563
TT
27struct ext2_struct_u32_iterate {
28 int magic;
29 ext2_u32_list bb;
30 int ptr;
19c78dc0
TT
31};
32
33
34/*
35 * Directory block iterator definition
36 */
37struct ext2_struct_dblist {
38 int magic;
39 ext2_filsys fs;
ab13b5a9
TT
40 unsigned long long size;
41 unsigned long long count;
19c78dc0 42 int sorted;
ab13b5a9 43 struct ext2_db_entry2 * list;
19c78dc0
TT
44};
45
46/*
47 * For directory iterators
48 */
49struct dir_context {
31dbecd4 50 ext2_ino_t dir;
19c78dc0
TT
51 int flags;
52 char *buf;
416c1de9 53 unsigned int buflen;
8bd0c959
TT
54 int (*func)(ext2_ino_t dir,
55 int entry,
56 struct ext2_dir_entry *dirent,
19c78dc0
TT
57 int offset,
58 int blocksize,
59 char *buf,
b5abe6fa 60 void *priv_data);
b5abe6fa 61 void *priv_data;
19c78dc0
TT
62 errcode_t errcode;
63};
64
a29f4d30
TT
65/*
66 * Inode cache structure
67 */
68struct ext2_inode_cache {
69 void * buffer;
4dbfd79d 70 blk64_t buffer_blk;
a29f4d30 71 int cache_last;
be31a8de 72 unsigned int cache_size;
a29f4d30
TT
73 int refcount;
74 struct ext2_inode_cache_ent *cache;
75};
76
77struct ext2_inode_cache_ent {
31dbecd4 78 ext2_ino_t ino;
91db7e20 79 struct ext2_inode *inode;
a29f4d30 80};
19c78dc0
TT
81
82/* Function prototypes */
83
36a43d67 84extern int ext2fs_process_dir_block(ext2_filsys fs,
ab13b5a9 85 blk64_t *blocknr,
03673dbb 86 e2_blkcnt_t blockcnt,
ab13b5a9 87 blk64_t ref_block,
36a43d67
TT
88 int ref_offset,
89 void *priv_data);
90
97581d44 91extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino);
46bd6bdf 92extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino);
416c1de9
ZL
93extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs,
94 ext2_ino_t ino,
95 void *priv_data);
96
95fd65bb
VAH
97/* Generic numeric progress meter */
98
99struct ext2fs_numeric_progress_struct {
100 __u64 max;
101 int log_max;
102 int skip_progress;
103};
104
dfe74c5c
TT
105/*
106 * progress callback functions
107 */
108struct ext2fs_progress_ops {
109 void (*init)(ext2_filsys fs,
110 struct ext2fs_numeric_progress_struct * progress,
111 const char *label, __u64 max);
112 void (*update)(ext2_filsys fs,
113 struct ext2fs_numeric_progress_struct * progress,
114 __u64 val);
115 void (*close)(ext2_filsys fs,
116 struct ext2fs_numeric_progress_struct * progress,
117 const char *message);
118};
119
120extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops;
121
95fd65bb
VAH
122extern void ext2fs_numeric_progress_init(ext2_filsys fs,
123 struct ext2fs_numeric_progress_struct * progress,
124 const char *label, __u64 max);
125extern void ext2fs_numeric_progress_update(ext2_filsys fs,
126 struct ext2fs_numeric_progress_struct * progress,
127 __u64 val);
128extern void ext2fs_numeric_progress_close(ext2_filsys fs,
129 struct ext2fs_numeric_progress_struct * progress,
130 const char *message);
19c78dc0 131
69365c68
TT
132/*
133 * 64-bit bitmap support
134 */
135
69365c68
TT
136extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
137 int type, __u64 start, __u64 end,
138 __u64 real_end,
139 const char * description,
140 ext2fs_generic_bitmap *bmap);
141
142extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
143
144extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
145 ext2fs_generic_bitmap *dest);
146
147extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
148 __u64 new_end,
149 __u64 new_real_end);
150extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
151 errcode_t neq,
152 __u64 end, __u64 *oend);
153extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
154 __u64 arg);
155extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
156 __u64 arg);
157extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
158 __u64 arg);
159extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap,
160 __u64 start, unsigned int num,
161 void *in);
162extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
163 __u64 start, unsigned int num,
164 void *out);
65d05cec 165extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
c21cde99 166
69365c68 167extern int ext2fs_mem_is_zero(const char *mem, size_t len);
1e745149 168
269da3b8
AD
169extern int ext2fs_file_block_offset_too_big(ext2_filsys fs,
170 struct ext2_inode *inode,
171 blk64_t offset);
dc248a10
DW
172
173/* atexit support */
174typedef void (*ext2_exit_fn)(void *);
175errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data);
176errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data);