Home | History | Annotate | Download | only in ext2fs
      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  */
     19 struct ext2_struct_u32_list {
     20 	int	magic;
     21 	int	num;
     22 	int	size;
     23 	__u32	*list;
     24 	int	badblocks_flags;
     25 };
     26 
     27 struct 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  */
     37 struct 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  */
     49 struct dir_context {
     50 	ext2_ino_t		dir;
     51 	int		flags;
     52 	char		*buf;
     53 	unsigned int	buflen;
     54 	int (*func)(ext2_ino_t	dir,
     55 		    int	entry,
     56 		    struct ext2_dir_entry *dirent,
     57 		    int	offset,
     58 		    int	blocksize,
     59 		    char	*buf,
     60 		    void	*priv_data);
     61 	void		*priv_data;
     62 	errcode_t	errcode;
     63 };
     64 
     65 /*
     66  * Inode cache structure
     67  */
     68 struct ext2_inode_cache {
     69 	void *				buffer;
     70 	blk64_t				buffer_blk;
     71 	int				cache_last;
     72 	unsigned int			cache_size;
     73 	int				refcount;
     74 	struct ext2_inode_cache_ent	*cache;
     75 };
     76 
     77 struct ext2_inode_cache_ent {
     78 	ext2_ino_t		ino;
     79 	struct ext2_inode	*inode;
     80 };
     81 
     82 /* Function prototypes */
     83 
     84 extern int ext2fs_process_dir_block(ext2_filsys  	fs,
     85 				    blk64_t		*blocknr,
     86 				    e2_blkcnt_t		blockcnt,
     87 				    blk64_t		ref_block,
     88 				    int			ref_offset,
     89 				    void		*priv_data);
     90 
     91 extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino);
     92 extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino);
     93 extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs,
     94 					  ext2_ino_t ino,
     95 					  void *priv_data);
     96 
     97 /* Generic numeric progress meter */
     98 
     99 struct ext2fs_numeric_progress_struct {
    100 	__u64		max;
    101 	int		log_max;
    102 	int		skip_progress;
    103 };
    104 
    105 /*
    106  * progress callback functions
    107  */
    108 struct 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 
    120 extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops;
    121 
    122 extern void ext2fs_numeric_progress_init(ext2_filsys fs,
    123 					 struct ext2fs_numeric_progress_struct * progress,
    124 					 const char *label, __u64 max);
    125 extern void ext2fs_numeric_progress_update(ext2_filsys fs,
    126 					   struct ext2fs_numeric_progress_struct * progress,
    127 					   __u64 val);
    128 extern void ext2fs_numeric_progress_close(ext2_filsys fs,
    129 					  struct ext2fs_numeric_progress_struct * progress,
    130 					  const char *message);
    131 
    132 /*
    133  * 64-bit bitmap support
    134  */
    135 
    136 extern 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 
    142 extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
    143 
    144 extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
    145 					  ext2fs_generic_bitmap *dest);
    146 
    147 extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
    148 					    __u64 new_end,
    149 					    __u64 new_real_end);
    150 extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
    151 					       errcode_t neq,
    152 					       __u64 end, __u64 *oend);
    153 extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
    154 				    __u64 arg);
    155 extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
    156 				      __u64 arg);
    157 extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
    158 				    __u64 arg);
    159 extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap,
    160 					       __u64 start, unsigned int num,
    161 					       void *in);
    162 extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
    163 					       __u64 start, unsigned int num,
    164 					       void *out);
    165 extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
    166 
    167 extern int ext2fs_mem_is_zero(const char *mem, size_t len);
    168 
    169 extern int ext2fs_file_block_offset_too_big(ext2_filsys fs,
    170 					    struct ext2_inode *inode,
    171 					    blk64_t offset);
    172 
    173 /* atexit support */
    174 typedef void (*ext2_exit_fn)(void *);
    175 errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data);
    176 errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data);
    177