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 #if HAVE_SYS_STAT_H
     13 #include <sys/stat.h>
     14 #endif
     15 
     16 #include "ext2fs.h"
     17 
     18 #define EXT2FS_MAX_NESTED_LINKS  8
     19 
     20 static inline int ext2fsP_is_disk_device(mode_t mode)
     21 {
     22 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
     23 	return S_ISBLK(mode) || S_ISCHR(mode);
     24 #else
     25 	return S_ISBLK(mode);
     26 #endif
     27 }
     28 
     29 /*
     30  * Badblocks list
     31  */
     32 struct ext2_struct_u32_list {
     33 	int	magic;
     34 	int	num;
     35 	int	size;
     36 	__u32	*list;
     37 	int	badblocks_flags;
     38 };
     39 
     40 struct ext2_struct_u32_iterate {
     41 	int			magic;
     42 	ext2_u32_list		bb;
     43 	int			ptr;
     44 };
     45 
     46 
     47 /*
     48  * Directory block iterator definition
     49  */
     50 struct ext2_struct_dblist {
     51 	int			magic;
     52 	ext2_filsys		fs;
     53 	unsigned long long	size;
     54 	unsigned long long	count;
     55 	int			sorted;
     56 	struct ext2_db_entry2 *	list;
     57 };
     58 
     59 /*
     60  * For directory iterators
     61  */
     62 struct dir_context {
     63 	ext2_ino_t		dir;
     64 	int		flags;
     65 	char		*buf;
     66 	unsigned int	buflen;
     67 	int (*func)(ext2_ino_t	dir,
     68 		    int	entry,
     69 		    struct ext2_dir_entry *dirent,
     70 		    int	offset,
     71 		    int	blocksize,
     72 		    char	*buf,
     73 		    void	*priv_data);
     74 	void		*priv_data;
     75 	errcode_t	errcode;
     76 };
     77 
     78 /*
     79  * Inode cache structure
     80  */
     81 struct ext2_inode_cache {
     82 	void *				buffer;
     83 	blk64_t				buffer_blk;
     84 	int				cache_last;
     85 	unsigned int			cache_size;
     86 	int				refcount;
     87 	struct ext2_inode_cache_ent	*cache;
     88 };
     89 
     90 struct ext2_inode_cache_ent {
     91 	ext2_ino_t		ino;
     92 	struct ext2_inode	*inode;
     93 };
     94 
     95 /* Function prototypes */
     96 
     97 extern int ext2fs_process_dir_block(ext2_filsys  	fs,
     98 				    blk64_t		*blocknr,
     99 				    e2_blkcnt_t		blockcnt,
    100 				    blk64_t		ref_block,
    101 				    int			ref_offset,
    102 				    void		*priv_data);
    103 
    104 extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino);
    105 extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino);
    106 extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs,
    107 					  ext2_ino_t ino,
    108 					  void *priv_data);
    109 
    110 /* Generic numeric progress meter */
    111 
    112 struct ext2fs_numeric_progress_struct {
    113 	__u64		max;
    114 	int		log_max;
    115 	int		skip_progress;
    116 };
    117 
    118 /*
    119  * progress callback functions
    120  */
    121 struct ext2fs_progress_ops {
    122 	void (*init)(ext2_filsys fs,
    123 		     struct ext2fs_numeric_progress_struct * progress,
    124 		     const char *label, __u64 max);
    125 	void (*update)(ext2_filsys fs,
    126 		       struct ext2fs_numeric_progress_struct * progress,
    127 		       __u64 val);
    128 	void (*close)(ext2_filsys fs,
    129 		      struct ext2fs_numeric_progress_struct * progress,
    130 		      const char *message);
    131 };
    132 
    133 extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops;
    134 
    135 extern void ext2fs_numeric_progress_init(ext2_filsys fs,
    136 					 struct ext2fs_numeric_progress_struct * progress,
    137 					 const char *label, __u64 max);
    138 extern void ext2fs_numeric_progress_update(ext2_filsys fs,
    139 					   struct ext2fs_numeric_progress_struct * progress,
    140 					   __u64 val);
    141 extern void ext2fs_numeric_progress_close(ext2_filsys fs,
    142 					  struct ext2fs_numeric_progress_struct * progress,
    143 					  const char *message);
    144 
    145 /*
    146  * 64-bit bitmap support
    147  */
    148 
    149 extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
    150 					   int type, __u64 start, __u64 end,
    151 					   __u64 real_end,
    152 					   const char * description,
    153 					   ext2fs_generic_bitmap *bmap);
    154 
    155 extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
    156 
    157 extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
    158 					  ext2fs_generic_bitmap *dest);
    159 
    160 extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
    161 					    __u64 new_end,
    162 					    __u64 new_real_end);
    163 extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
    164 					       errcode_t neq,
    165 					       __u64 end, __u64 *oend);
    166 extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
    167 				    __u64 arg);
    168 extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
    169 				      __u64 arg);
    170 extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
    171 				    __u64 arg);
    172 extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap,
    173 					       __u64 start, unsigned int num,
    174 					       void *in);
    175 extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
    176 					       __u64 start, unsigned int num,
    177 					       void *out);
    178 extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
    179 
    180 extern int ext2fs_mem_is_zero(const char *mem, size_t len);
    181 
    182 extern int ext2fs_file_block_offset_too_big(ext2_filsys fs,
    183 					    struct ext2_inode *inode,
    184 					    blk64_t offset);
    185 
    186 /* atexit support */
    187 typedef void (*ext2_exit_fn)(void *);
    188 errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data);
    189 errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data);
    190 
    191 #define EXT2FS_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))
    192