ext2fsP.h revision 65d05cec3d4ae02dec1b15dfec21e571cb83c9cf
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ext2fsP.h --- private header file for ext2 library
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1997 Theodore Ts'o.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * %Begin-Header%
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This file may be redistributed under the terms of the GNU Library
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * General Public License, version 2.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * %End-Header%
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ext2fs.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Badblocks list
162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch */
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ext2_struct_u32_list {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	magic;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	num;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	size;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	__u32	*list;
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	int	badblocks_flags;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ext2_struct_u32_iterate {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int			magic;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	ext2_u32_list		bb;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int			ptr;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Directory block iterator definition
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustruct ext2_struct_dblist {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int			magic;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	ext2_filsys		fs;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned long long	size;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned long long	count;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int			sorted;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct ext2_db_entry2 *	list;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * For directory iterators
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct dir_context {
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	ext2_ino_t		dir;
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	int		flags;
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	char		*buf;
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	int (*func)(ext2_ino_t	dir,
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		    int	entry,
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		    struct ext2_dir_entry *dirent,
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		    int	offset,
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		    int	blocksize,
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		    char	*buf,
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		    void	*priv_data);
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	void		*priv_data;
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	errcode_t	errcode;
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Inode cache structure
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)struct ext2_inode_cache {
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	void *				buffer;
67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	blk_t				buffer_blk;
68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	int				cache_last;
69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	int				cache_size;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	int				refcount;
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	struct ext2_inode_cache_ent	*cache;
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)};
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ext2_inode_cache_ent {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	ext2_ino_t		ino;
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	struct ext2_inode	inode;
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Function prototypes */
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern int ext2fs_process_dir_block(ext2_filsys  	fs,
82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)				    blk64_t		*blocknr,
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)				    e2_blkcnt_t		blockcnt,
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)				    blk64_t		ref_block,
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)				    int			ref_offset,
86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)				    void		*priv_data);
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/* Generic numeric progress meter */
890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct ext2fs_numeric_progress_struct {
910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	__u64		max;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int		log_max;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int		skip_progress;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern void ext2fs_numeric_progress_init(ext2_filsys fs,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)					 struct ext2fs_numeric_progress_struct * progress,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)					 const char *label, __u64 max);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern void ext2fs_numeric_progress_update(ext2_filsys fs,
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)					   struct ext2fs_numeric_progress_struct * progress,
101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch					   __u64 val);
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)extern void ext2fs_numeric_progress_close(ext2_filsys fs,
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)					  struct ext2fs_numeric_progress_struct * progress,
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)					  const char *message);
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)/*
107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * 64-bit bitmap support
108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */
109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#define EXT2FS_BMAP64_BITARRAY	1
111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochextern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch					   int type, __u64 start, __u64 end,
114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch					   __u64 real_end,
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)					   const char * description,
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)					   ext2fs_generic_bitmap *bmap);
117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)					  ext2fs_generic_bitmap *dest);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)					    __u64 new_end,
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)					    __u64 new_real_end);
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)					       errcode_t neq,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)					       __u64 end, __u64 *oend);
1295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuextern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				    __u64 arg);
1315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuextern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)				      __u64 arg);
133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)				    __u64 arg);
135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap,
136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)					       __u64 start, unsigned int num,
137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)					       void *in);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)					       __u64 start, unsigned int num,
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)					       void *out);
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)extern int ext2fs_mem_is_zero(const char *mem, size_t len);
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)