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 int (*func)(ext2_ino_t dir, 54 int entry, 55 struct ext2_dir_entry *dirent, 56 int offset, 57 int blocksize, 58 char *buf, 59 void *priv_data); 60 void *priv_data; 61 errcode_t errcode; 62 }; 63 64 /* 65 * Inode cache structure 66 */ 67 struct ext2_inode_cache { 68 void * buffer; 69 blk64_t buffer_blk; 70 int cache_last; 71 int cache_size; 72 int refcount; 73 struct ext2_inode_cache_ent *cache; 74 }; 75 76 struct ext2_inode_cache_ent { 77 ext2_ino_t ino; 78 struct ext2_inode inode; 79 }; 80 81 /* Function prototypes */ 82 83 extern int ext2fs_process_dir_block(ext2_filsys fs, 84 blk64_t *blocknr, 85 e2_blkcnt_t blockcnt, 86 blk64_t ref_block, 87 int ref_offset, 88 void *priv_data); 89 90 /* Generic numeric progress meter */ 91 92 struct ext2fs_numeric_progress_struct { 93 __u64 max; 94 int log_max; 95 int skip_progress; 96 }; 97 98 extern void ext2fs_numeric_progress_init(ext2_filsys fs, 99 struct ext2fs_numeric_progress_struct * progress, 100 const char *label, __u64 max); 101 extern void ext2fs_numeric_progress_update(ext2_filsys fs, 102 struct ext2fs_numeric_progress_struct * progress, 103 __u64 val); 104 extern void ext2fs_numeric_progress_close(ext2_filsys fs, 105 struct ext2fs_numeric_progress_struct * progress, 106 const char *message); 107 108 /* 109 * 64-bit bitmap support 110 */ 111 112 extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic, 113 int type, __u64 start, __u64 end, 114 __u64 real_end, 115 const char * description, 116 ext2fs_generic_bitmap *bmap); 117 118 extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap); 119 120 extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, 121 ext2fs_generic_bitmap *dest); 122 123 extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, 124 __u64 new_end, 125 __u64 new_real_end); 126 extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, 127 errcode_t neq, 128 __u64 end, __u64 *oend); 129 extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, 130 __u64 arg); 131 extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, 132 __u64 arg); 133 extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, 134 __u64 arg); 135 extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap, 136 __u64 start, unsigned int num, 137 void *in); 138 extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap, 139 __u64 start, unsigned int num, 140 void *out); 141 extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func); 142 143 extern int ext2fs_mem_is_zero(const char *mem, size_t len); 144 145 extern int ext2fs_file_block_offset_too_big(ext2_filsys fs, 146 struct ext2_inode *inode, 147 blk64_t offset); 148