211 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * ext2fsP.h --- private header file for ext2 library
 | |
|  *
 | |
|  * Copyright (C) 1997 Theodore Ts'o.
 | |
|  *
 | |
|  * %Begin-Header%
 | |
|  * This file may be redistributed under the terms of the GNU Library
 | |
|  * General Public License, version 2.
 | |
|  * %End-Header%
 | |
|  */
 | |
| 
 | |
| #if HAVE_SYS_STAT_H
 | |
| #include <sys/stat.h>
 | |
| #endif
 | |
| 
 | |
| #include "ext2fs.h"
 | |
| 
 | |
| #define EXT2FS_MAX_NESTED_LINKS  8
 | |
| 
 | |
| static inline int ext2fsP_is_disk_device(mode_t mode)
 | |
| {
 | |
| #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 | |
| 	return S_ISBLK(mode) || S_ISCHR(mode);
 | |
| #else
 | |
| 	return S_ISBLK(mode);
 | |
| #endif
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Badblocks list
 | |
|  */
 | |
| struct ext2_struct_u32_list {
 | |
| 	int	magic;
 | |
| 	int	num;
 | |
| 	int	size;
 | |
| 	__u32	*list;
 | |
| 	int	badblocks_flags;
 | |
| };
 | |
| 
 | |
| struct ext2_struct_u32_iterate {
 | |
| 	int			magic;
 | |
| 	ext2_u32_list		bb;
 | |
| 	int			ptr;
 | |
| };
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * Directory block iterator definition
 | |
|  */
 | |
| struct ext2_struct_dblist {
 | |
| 	int			magic;
 | |
| 	ext2_filsys		fs;
 | |
| 	unsigned long long	size;
 | |
| 	unsigned long long	count;
 | |
| 	int			sorted;
 | |
| 	struct ext2_db_entry2 *	list;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * For directory iterators
 | |
|  */
 | |
| struct dir_context {
 | |
| 	ext2_ino_t		dir;
 | |
| 	int		flags;
 | |
| 	char		*buf;
 | |
| 	unsigned int	buflen;
 | |
| 	int (*func)(ext2_ino_t	dir,
 | |
| 		    int	entry,
 | |
| 		    struct ext2_dir_entry *dirent,
 | |
| 		    int	offset,
 | |
| 		    int	blocksize,
 | |
| 		    char	*buf,
 | |
| 		    void	*priv_data);
 | |
| 	void		*priv_data;
 | |
| 	errcode_t	errcode;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Inode cache structure
 | |
|  */
 | |
| struct ext2_inode_cache {
 | |
| 	void *				buffer;
 | |
| 	blk64_t				buffer_blk;
 | |
| 	int				cache_last;
 | |
| 	unsigned int			cache_size;
 | |
| 	int				refcount;
 | |
| 	struct ext2_inode_cache_ent	*cache;
 | |
| };
 | |
| 
 | |
| struct ext2_inode_cache_ent {
 | |
| 	ext2_ino_t		ino;
 | |
| 	struct ext2_inode	*inode;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * NLS defintions
 | |
|  */
 | |
| struct ext2fs_nls_table {
 | |
| 	int version;
 | |
| 	const struct ext2fs_nls_ops *ops;
 | |
| };
 | |
| 
 | |
| struct ext2fs_nls_ops {
 | |
| 	int (*casefold)(const struct ext2fs_nls_table *charset,
 | |
| 			const unsigned char *str, size_t len,
 | |
| 			unsigned char *dest, size_t dlen);
 | |
| 	int (*validate)(const struct ext2fs_nls_table *table,
 | |
| 			char *s, size_t len, char **pos);
 | |
| 	int (*casefold_cmp)(const struct ext2fs_nls_table *table,
 | |
| 			    const unsigned char *str1, size_t len1,
 | |
| 			    const unsigned char *str2, size_t len2);
 | |
| };
 | |
| 
 | |
| /* Function prototypes */
 | |
| 
 | |
| extern int ext2fs_process_dir_block(ext2_filsys  	fs,
 | |
| 				    blk64_t		*blocknr,
 | |
| 				    e2_blkcnt_t		blockcnt,
 | |
| 				    blk64_t		ref_block,
 | |
| 				    int			ref_offset,
 | |
| 				    void		*priv_data);
 | |
| 
 | |
| extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino);
 | |
| extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino);
 | |
| extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs,
 | |
| 					  ext2_ino_t ino,
 | |
| 					  void *priv_data);
 | |
| 
 | |
| /* Generic numeric progress meter */
 | |
| 
 | |
| struct ext2fs_numeric_progress_struct {
 | |
| 	__u64		max;
 | |
| 	int		log_max;
 | |
| 	int		skip_progress;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * progress callback functions
 | |
|  */
 | |
| struct ext2fs_progress_ops {
 | |
| 	void (*init)(ext2_filsys fs,
 | |
| 		     struct ext2fs_numeric_progress_struct * progress,
 | |
| 		     const char *label, __u64 max);
 | |
| 	void (*update)(ext2_filsys fs,
 | |
| 		       struct ext2fs_numeric_progress_struct * progress,
 | |
| 		       __u64 val);
 | |
| 	void (*close)(ext2_filsys fs,
 | |
| 		      struct ext2fs_numeric_progress_struct * progress,
 | |
| 		      const char *message);
 | |
| };
 | |
| 
 | |
| extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops;
 | |
| 
 | |
| extern void ext2fs_numeric_progress_init(ext2_filsys fs,
 | |
| 					 struct ext2fs_numeric_progress_struct * progress,
 | |
| 					 const char *label, __u64 max);
 | |
| extern void ext2fs_numeric_progress_update(ext2_filsys fs,
 | |
| 					   struct ext2fs_numeric_progress_struct * progress,
 | |
| 					   __u64 val);
 | |
| extern void ext2fs_numeric_progress_close(ext2_filsys fs,
 | |
| 					  struct ext2fs_numeric_progress_struct * progress,
 | |
| 					  const char *message);
 | |
| 
 | |
| /*
 | |
|  * 64-bit bitmap support
 | |
|  */
 | |
| 
 | |
| extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
 | |
| 					   int type, __u64 start, __u64 end,
 | |
| 					   __u64 real_end,
 | |
| 					   const char * description,
 | |
| 					   ext2fs_generic_bitmap *bmap);
 | |
| 
 | |
| extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
 | |
| 
 | |
| extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
 | |
| 					  ext2fs_generic_bitmap *dest);
 | |
| 
 | |
| extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
 | |
| 					    __u64 new_end,
 | |
| 					    __u64 new_real_end);
 | |
| extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
 | |
| 					       errcode_t neq,
 | |
| 					       __u64 end, __u64 *oend);
 | |
| extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
 | |
| 				    __u64 arg);
 | |
| extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
 | |
| 				      __u64 arg);
 | |
| extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
 | |
| 				    __u64 arg);
 | |
| extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap,
 | |
| 					       __u64 start, unsigned int num,
 | |
| 					       void *in);
 | |
| extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
 | |
| 					       __u64 start, unsigned int num,
 | |
| 					       void *out);
 | |
| extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
 | |
| 
 | |
| extern int ext2fs_mem_is_zero(const char *mem, size_t len);
 | |
| 
 | |
| extern int ext2fs_file_block_offset_too_big(ext2_filsys fs,
 | |
| 					    struct ext2_inode *inode,
 | |
| 					    blk64_t offset);
 | |
| 
 | |
| /* atexit support */
 | |
| typedef void (*ext2_exit_fn)(void *);
 | |
| errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data);
 | |
| errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data);
 | |
| 
 | |
| #define EXT2FS_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))
 |